Yii2.0使用AR聯表查詢方法分享

來源:互聯網
上載者:User
Yii2.0中使用聯表查詢有兩種辦法,第一種是查詢構建器(Query Builder),第二種使用活動記錄(Active Record),中文網對查詢構建器講的很詳細,AR則說的很坑爹,本文主要和大家介紹Yii2.0使用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'],   ], ]); ?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.