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