首页 > 开发 > PHP > 正文

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

2024-05-04 22:47:00
字体:
来源:转载
供稿:网友

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'],   ], ]); ?> 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表