Yii 2.0實(shí)現(xiàn)聯(lián)表查詢加搜索分頁(yè)的方法示例
前言
最近在學(xué)習(xí)yii2.0,在使用yii2.0過(guò)程中遇到一些問(wèn)題,現(xiàn)將查詢搜索分頁(yè)的方法整理如下,分享出來(lái)供大家參考學(xué)習(xí),話不多說(shuō),來(lái)一起看看詳細(xì)的介紹:
主表:{{%article}}
關(guān)聯(lián)表:{{%article_class}}
方法如下
1、使用gii創(chuàng)建CRUD和search不詳述
2、在Article中添加的關(guān)聯(lián)內(nèi)容,代碼#注釋部分
class Article extends \yii\db\ActiveRecord { #關(guān)聯(lián)查詢1:這里加上被關(guān)聯(lián)字段 public $class_name; ... public function rules() { return [ [['article_title','article_content'], 'required'], [['article_content','article_title','article_class'], 'string'], [['article_addtime', 'article_updatetime'], 'integer'], [['article_title', 'article_author'], 'string', 'max' => 50], #關(guān)聯(lián)查詢2:這里加上safe驗(yàn)證,表示該表單字段無(wú)驗(yàn)證規(guī)則 ['class_name','safe'], ]; } ... #關(guān)聯(lián)查詢3:獲取被關(guān)聯(lián)表 mysite_article_class public function getArticleClass(){ /** * 第一個(gè)參數(shù)為要關(guān)聯(lián)的子表模型類名稱, * 第二個(gè)參數(shù)指定通過(guò)子表的 id 去關(guān)聯(lián)主表的 article_class 字段 */ return $this->hasMany(ArticleClass::className(), ['id' => 'article_class']); } ... }
3、在ArticleSearch中添加的查詢和關(guān)聯(lián)內(nèi)容,代碼#注釋部分
class ArticleSearch extends Article { #關(guān)聯(lián)查詢1:這里加上被關(guān)聯(lián)字段 public $class_name; ... public function rules() { return [ [['id', 'article_addtime', 'article_updatetime'], 'integer'], [['article_title', 'article_content', 'article_class', 'article_author'], 'safe'], #關(guān)聯(lián)查詢2:這里加上safe驗(yàn)證,表示該表單字段無(wú)驗(yàn)證規(guī)則 ['class_name','safe'], ]; } ... public function search($params) { $query = Article::find(); // add conditions that should always apply here #關(guān)聯(lián)查詢4:使用jionWith和select做關(guān)聯(lián)查詢 $query = Article::find(); $query->joinWith(['articleClass']); $query->select("{{%article}}.*,{{%article_class}}.class_name"); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $this->load($params); if (!$this->validate()) { return $dataProvider; } // grid filtering conditions #精確查詢 $query->andFilterWhere([ 'id' => $this->id, 'article_addtime' => $this->article_addtime, 'article_updatetime' => $this->article_updatetime, #關(guān)聯(lián)查詢5:添加被關(guān)聯(lián)字段的精確查詢,這里要跟view表單被查詢屬性一致, // '{{%article_class}}.class_name' => $this->class_name, ]); #模糊查詢 $query->andFilterWhere(['like', 'article_title', $this->article_title]) ->andFilterWhere(['like', 'article_content', $this->article_content]) ->andFilterWhere(['like', 'article_class', $this->article_class]) ->andFilterWhere(['like', 'article_author', $this->article_author]) #關(guān)聯(lián)查詢5:添加被關(guān)聯(lián)字段的精確查詢,這里要跟view表單被查詢屬性一致, ->andFilterWhere(['like', '{{%article_class}}.class_name', $this->class_name]); return $dataProvider; } ... }
4、在ArticleController中添加的分頁(yè)內(nèi)容,代碼#注釋部分
public function actionIndex() { $article = new Article(); #查詢 $searchModel = new ArticleSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); #分頁(yè) $dataProvider->pagination = ['pagesize' => '3']; return $this->render('index', [ 'dataProvider' => $dataProvider, 'model' => $article, 'searchModel' => $searchModel, ]); }
5、在index view中添加的表單內(nèi)容,代碼#注釋部分
<?= GridView::widget([ 'dataProvider' => $dataProvider, #查詢表單 'filterModel' => $searchModel, 'columns' => [ [ 'class' => 'yii\grid\SerialColumn', 'header' => '編號(hào)', ], // 'article_class', #注意這里被關(guān)聯(lián)表字段是{{%article_class}}.class_name,表單屬性這么寫(xiě)'attribute' => 'class_name', #查詢結(jié)果就是被關(guān)聯(lián)表字段值'value' => 'class_name', [ 'label'=>'文章分類', 'attribute' => 'class_name', 'value' => 'class_name', ], 'article_title', 'article_addtime:datetime', // 'article_updatetime:datetime', // 'article_author', [ 'class' => 'yii\grid\ActionColumn', 'header' => '操作', ], ], ]); ?>
以上步驟完成結(jié)果如圖:
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Yii2中使用join、joinwith多表關(guān)聯(lián)查詢
- Yii多表聯(lián)合查詢操作詳解
- Yii2中多表關(guān)聯(lián)查詢hasOne hasMany的方法
- Yii2.0表關(guān)聯(lián)查詢實(shí)例分析
- 詳解Yii2.0使用AR聯(lián)表查詢實(shí)例
- Yii2.0框架模型多表關(guān)聯(lián)查詢示例
- Yii框架關(guān)聯(lián)查詢with用法分析
- Yii2實(shí)現(xiàn)跨mysql數(shù)據(jù)庫(kù)關(guān)聯(lián)查詢排序功能代碼
- Yii中的relations數(shù)據(jù)關(guān)聯(lián)查詢及統(tǒng)計(jì)功能用法詳解
- Yii框架連表查詢操作示例
相關(guān)文章
CI框架無(wú)限級(jí)分類+遞歸的實(shí)現(xiàn)代碼
CodeIgniter是一個(gè)輕量級(jí)但功能強(qiáng)大的PHP框架,基于MVC設(shè)計(jì)模式,提供了一套豐富的類庫(kù),簡(jiǎn)單易學(xué),高效實(shí)用。下面給大家介紹CI框架無(wú)限級(jí)分類+遞歸的實(shí)現(xiàn)代碼,感興趣的朋友參考下吧2016-11-11PHP 傳輸會(huì)話curl函數(shù)的實(shí)例詳解
這篇文章主要介紹了PHP 傳輸會(huì)話curl函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09PHP實(shí)現(xiàn)RSA加解密算法示例(生成密鑰位數(shù)為1024位的方法)
下面小編就為大家分享一篇PHP實(shí)現(xiàn)RSA加解密算法示例(生成密鑰位數(shù)為1024位的方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Yii1.1中通過(guò)Sql查詢進(jìn)行的分頁(yè)操作方法
這篇文章主要介紹了Yii1.1中通過(guò)Sql查詢進(jìn)行的分頁(yè)操作方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03thinkphp3查詢mssql數(shù)據(jù)庫(kù)亂碼解決方法分享
這篇文章主要介紹了thinkphp3查詢mssql數(shù)據(jù)庫(kù)亂碼解決方法,需要的朋友可以參考下2014-02-02php正確輸出json數(shù)據(jù)的實(shí)例講解
今天小編就為大家分享一篇php正確輸出json數(shù)據(jù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Laravel框架實(shí)現(xiàn)model層的增刪改查(CURD)操作示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)model層的增刪改查(CURD)操作,結(jié)合實(shí)例形式分析了Laravel框架模型model層進(jìn)行數(shù)據(jù)庫(kù)的增刪改查操作具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-05-05