Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的很坑爹,下面贴出自己实践的方法,以供参考。

两个表

{{%article}} 和 {{%article_class}}

{{%article}} .article_class关联{{%article_class}}.id

1、要使用AR做关联查询,首先在models {Article} 中创建关联:

class Article extends yiidbActiveRecord {   //这里声明被关联字段   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" => "yiigridSerialColumn"],     "id",     //"article_content:ntext",     [       "value"=>"class_name",       "label"=>"文章分类",     ],     "article_title",     "article_addtime:datetime",     // "article_updatetime:datetime",     // "article_author",     ["class" => "yiigridActionColumn"],   ], ]); ?> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持网页设计。