Yii 2.0實(shí)現(xiàn)聯(lián)表查詢加搜索分頁的方法示例
前言
最近在學(xué)習(xí)yii2.0,在使用yii2.0過程中遇到一些問題,現(xiàn)將查詢搜索分頁的方法整理如下,分享出來供大家參考學(xué)習(xí),話不多說,來一起看看詳細(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)證,表示該表單字段無驗(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ù)指定通過子表的 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)證,表示該表單字段無驗(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中添加的分頁內(nèi)容,代碼#注釋部分
public function actionIndex()
{
$article = new Article();
#查詢
$searchModel = new ArticleSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
#分頁
$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,表單屬性這么寫'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í)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(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ù)庫關(guān)聯(lián)查詢排序功能代碼
- Yii中的relations數(shù)據(jù)關(guān)聯(lián)查詢及統(tǒng)計(jì)功能用法詳解
- Yii框架連表查詢操作示例
相關(guān)文章
php獲取用戶真實(shí)IP和防刷機(jī)制的實(shí)例代碼
這篇文章主要介紹了php獲取用戶真實(shí)IP和防刷機(jī)制,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-11-11
ThinkPHP里用U方法調(diào)用js文件實(shí)例
這篇文章主要介紹了ThinkPHP里用U方法調(diào)用js文件的方法,實(shí)例分析了ThinkPHP中U方法的使用技巧,需要的朋友可以參考下2015-06-06
PHP+ajaxfileupload+jcrop插件完美實(shí)現(xiàn)頭像上傳剪裁
在做項(xiàng)目的時(shí)候,經(jīng)常需要一些會(huì)員系統(tǒng)相關(guān)的內(nèi)容,比如頭像的上傳與裁剪等等,下面將這塊內(nèi)容分享給大家2014-06-06
php+memcache實(shí)現(xiàn)的網(wǎng)站在線人數(shù)統(tǒng)計(jì)代碼
這篇文章主要介紹了php+memcache實(shí)現(xiàn)的網(wǎng)站在線人數(shù)統(tǒng)計(jì)代碼,代碼例子簡(jiǎn)潔實(shí)用,需要的朋友可以參考下2014-07-07
php生成縮略圖示例代碼分享(使用gd庫實(shí)現(xiàn))
分享一個(gè)利用php的GD庫生成縮略圖的例子,大家參考使用吧2014-01-01
TP5框架實(shí)現(xiàn)自定義分頁樣式的方法示例
這篇文章主要介紹了TP5框架實(shí)現(xiàn)自定義分頁樣式的方法,結(jié)合實(shí)例形式詳細(xì)分析了TP5自定義分頁樣式相關(guān)類定義、樣式設(shè)置、配置與使用技巧,需要的朋友可以參考下2020-04-04
laravel-admin 實(shí)現(xiàn)給grid的列添加行數(shù)序號(hào)的方法
今天小編就為大家分享一篇laravel-admin 實(shí)現(xiàn)給grid的列添加行數(shù)序號(hào)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
PHP安裝threads多線程擴(kuò)展基礎(chǔ)教程
php5.3或以上,且為線程安全版本。apache和php使用的編譯器必須一致,通過phpinfo()查看Thread Safety為enabled則為線程安全版,通過phpinfo()查看Compiler項(xiàng)可以知道使用的編譯器,本文給大家介紹PHP安裝threads多線程擴(kuò)展基礎(chǔ)教程,需要的朋友參考下2015-11-11

