服务器之家

服务器之家 > 正文

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

时间:2021-05-28 16:59     来源/作者:一夜长风

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

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部