服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - 详解Yii2.0使用AR联表查询实例

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

2021-05-28 16:59一夜长风 PHP教程

这篇文章主要介绍了详解Yii2.0使用AR联表查询实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

延伸 · 阅读

精彩推荐