文章出處
文章列表
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
聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文鏈接
文章列表
全站熱搜