Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的很坑爹,下面贴出自己实践的方法,以供参考。
两个表
{{%article}} 和 {{%article_class}}
{{%article}} .article_class关联{{%article_class}}.id
1、要使用AR做关联查询,首先在models {Article} 中创建关联:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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}中使用,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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}中使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?= 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' ], ], ]); ?> |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/wlzx120/article/details/54137081