Yii 2.0實(shí)現(xiàn)聯(lián)表查詢加搜索分頁(yè)的方法示例
前言
最近在學(xué)習(xí)yii2.0,在使用yii2.0過程中遇到一些問題,現(xiàn)將查詢搜索分頁(yè)的方法整理如下,分享出來(lái)供大家參考學(xué)習(xí),話不多說,來(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ù)指定通過子表的 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,表單屬性這么寫'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)一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(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-11
PHP 傳輸會(huì)話curl函數(shù)的實(shí)例詳解
這篇文章主要介紹了PHP 傳輸會(huì)話curl函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09
PHP實(shí)現(xiàn)RSA加解密算法示例(生成密鑰位數(shù)為1024位的方法)
下面小編就為大家分享一篇PHP實(shí)現(xiàn)RSA加解密算法示例(生成密鑰位數(shù)為1024位的方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-03-03
Yii1.1中通過Sql查詢進(jìn)行的分頁(yè)操作方法
這篇文章主要介紹了Yii1.1中通過Sql查詢進(jìn)行的分頁(yè)操作方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
thinkphp3查詢mssql數(shù)據(jù)庫(kù)亂碼解決方法分享
這篇文章主要介紹了thinkphp3查詢mssql數(shù)據(jù)庫(kù)亂碼解決方法,需要的朋友可以參考下2014-02-02
php正確輸出json數(shù)據(jù)的實(shí)例講解
今天小編就為大家分享一篇php正確輸出json數(shù)據(jù)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-08-08
Laravel框架實(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

