1、簡介 從接觸yii框架到現在已經快有兩個月了,但是自己對yii框架的瞭解程度並不是很深,並沒有系統地去學習,僅僅只是在做項目的時候遇到不懂得知識才去翻手冊。 在上一個項目中因為需要將關聯的表的欄位顯示出來並且帶搜索排序功能,這個在之前並沒有接觸過,因此在手冊中查找了相關的資料把這個需求寫出來了, ...
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添加關聯欄位的方法,那麼你就可以根據現有的知識更改出更多的花樣出來。。。。
(以上是自己的一些見解,若有不足或者錯誤的地方請各位指出)
作者:那一葉隨風 http://www.cnblogs.com/phpstudy2015-6/
原文地址:http://www.cnblogs.com/phpstudy2015-6/p/7712017.html
聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文鏈接