首頁  >  文章  >  後端開發  >  YII關聯欄位並帶有搜尋排序功能的實作方法

YII關聯欄位並帶有搜尋排序功能的實作方法

一个新手
一个新手原創
2017-10-23 09:06:461323瀏覽

1、簡介

  從接觸yii框架到現在已經快有兩個月了,但是自己對yii框架的了解程度並不是很深,並沒有系統地去學習,僅僅只是在做專案的時候遇到不懂知識才去翻手冊。

  在上一個項目中因為需要將關聯的表的字段顯示出來並且帶搜索排序功能,這個在之前並沒有接觸過,因此在手冊中查找了相關的資料把這個需求寫出來了,並在有道雲做了一些筆記,今天剛好是周末有時間就將它整理成一篇博客吧。

  廢話不多說,直接上步驟吧。

2、操作步驟

  背景:這裡針對GII自動產生的CURL中,增加關聯表格欄位。

  需求:A表中有一個字段pt_id關聯B表;現在需要在基於A表GII生成的CURL的基礎上,增加A表關聯B表字段的name值,並且帶有搜尋排序功能。

  2.1、step1在A model中加入一個方法


1 //意思即获取Pt的数据
2 public function getPt()    //get**  get后面任意
3 {
4     //模型名:className(),B表字段=>A表对应字段 
5     return $this->hasOne(Pt::className(), ['id' => 'ptid']); 
6 }

   2.2、step2在A search 中加入需要關聯的欄位變數


1 public $name;   //可以关联显示多个字段
2 public $*****;  //例子

    2.3、修改A search中的search函數


1 //search函数中添加 表示在SQL语句中增加关联查询
2 //看起来是那么的熟悉,哈哈
3 $query->joinWith(['pt']);   //这里等待pt中的值就是step1中get后面的命名

   2.4、在A search中設定排序配置


#
 1 //这里存放的是可以排序的字段 
 2 //如果A Search已经存在setSort,则其他动,只需要添加新的字段就可以了 
 3 //但是,我的yii 2生成的Search不存在这个排序,因此就需要额外添加了 
 4 //注意:当你的search中不存在这个配置时,即表明默认配置里面有设置过,当你在这里添加一个setSort则将会覆盖默认配置,之前默认有排序功能的字段将会失效 
 5 $dataProvider->setSort( 
 6 'attributes'=>[ 
 7 //====添加新字段排序配置= 
 8 'name'=>[ 
 9 'asc'=>['name' => SORT_ASC],
 10 'desc'=>['name' => SORT_DESC],
 11 'lable'=>'name',
 12 ],
 13 //==================
 14 ]
 15 );

   2.5、在A search中新增過濾設定


1 //在代码里面照着队形添加这一句即可
2 //like,关联表全名,this->name
3 $query->andFilterWhere(['like', '**_pt.name', $this->name]) ;

  2.6、修改index檢視中的gridview


#
 1 'columns' => [ 
 2 //=========== 
 3 //添加 
 4 [ 
 5           'attribute' => 'name', 
 6           'label' => '平台', 
 7           'value' => 'pt.name', 
 8           'filter' => Html::activeTextInput($searchModel, 'name', [ 
 9               'class' => 'form-control'
 10           ]),
 11 ],
 12 //=============
 13 ]

  此時已經完成一大半了,你訪問這個控制器,已經可以看到頁面效果了,但是在搜尋的時候確實失效的,為什麼呢?

  因為此時你提交的這個欄位資訊是屬於不安全的,程式中沒有記錄。

  2.7、給該欄位設定為安全等級


#
1 //在A Search中的设置规则方法中添加
2 //name字段为safe
3 [['name'], safe]

大工告成! !

3、小結

  這裡僅僅只是一個小小的例子,透過這個例子可以知道yii添加關聯字段的方法,那麼你就可以根據現有的知識更改出更多的花樣出來。 。 。 。

以上是YII關聯欄位並帶有搜尋排序功能的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn