php教程

超轻量级php框架startmvc

详解Yii2.0使用AR联表查询实例

更新时间:2020-03-20 21:09:45 作者:startmvc
Yii2.0中使用联表查询有两种办法,第一种是查询构建器(QueryBuilder),第二种使用活动记录

Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的很坑爹,下面贴出自己实践的方法,以供参考。

两个表

{{%article}} 和 {{%article_class}}

{{%article}} .article_class关联{{%article_class}}.id

1、要使用AR做关联查询,首先在models {Article} 中创建关联:


class Article extends \yii\db\ActiveRecord 
{ 
 //这里声明被关联字段 
 public $class_name; 
 
 /** 
 * @inheritdoc 
 */ 
 public static function tableName() 
 { 
 return '{{%article}}'; 
 } 
 ... 
 //关联 mysite_article_class 表 
 public function getArticleClass(){ 
 /** 
 * 第一个参数为要关联的子表模型类名称, 
 * 第二个参数指定通过子表的 id 去关联主表的 article_class 字段 
 */ 
 return $this->hasMany(ArticleClass::className(), ['id' => 'article_class']); 
 } 
 
} 

2、在controllers {ArticleController}中使用,


public function actionIndex() 
 { 
 $article = new Article(); 
 if(Yii::$app->request->get('class')){ 
 $query = Article::find() 
 ->joinWith('articleClass') 
 ->select(['{{%article}}.*,{{%article_class}}.class_name']) 
 ->where(['article_class' => Yii::$app->request->get('class')]); 
 $dataProvider = new ActiveDataProvider([ 
 'query' => $query, 
 ]); 
 
 }else{ 
 $query = Article::find() 
 ->joinWith('articleClass') 
 ->select(['{{%article}}.*,{{%article_class}}.class_name']); 
 $dataProvider = new ActiveDataProvider([ 
 'query' => $query, 
 ]); 
 
 } 
 return $this->render('index', [ 
 'dataProvider' => $dataProvider, 
 'model' => $article, 
 ]); 
 } 

3、在view {GridView}中使用


<?= GridView::widget([ 
 'dataProvider' => $dataProvider, 
 'columns' => [ 
 ['class' => 'yii\grid\SerialColumn'], 
 'id', 
 //'article_content:ntext', 
 [ 
 'value'=>'class_name', 
 'label'=>'文章分类', 
 ], 
 'article_title', 
 'article_addtime:datetime', 
 // 'article_updatetime:datetime', 
 // 'article_author', 
 ['class' => 'yii\grid\ActionColumn'], 
 ], 
]); ?> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Yii AR 联表查询 yii2.0联表查询 yii2.0 两表联查