YII關聯欄位並帶搜索排序功能

来源:http://www.cnblogs.com/phpstudy2015-6/archive/2017/10/22/7712017.html
-Advertisement-
Play Games

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

 聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文鏈接

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習爬蟲有一段時間了,今天使用Scrapy框架將校花網的圖片爬取到本地。Scrapy爬蟲框架相對於使用requests庫進行網頁的爬取,擁有更高的性能。 Scrapy官方定義:Scrapy是用於抓取網站並提取結構化數據的應用程式框架,可用於廣泛的有用應用程式,如數據挖掘,信息處理或歷史存檔。 建立S ...
  • Git忽略規則: 在git中如果想忽略掉某個文件,不讓這個文件提交到版本庫中,可以使用修改根目錄中 .gitignore 文件的方法(如果沒有這個文件,則需自己手工建立此文件)。這個文件每一行保存了一個匹配的規則例如: # 此為註釋 – 將被 Git 忽略*.sample # 忽略所有 .sampl ...
  • 1、取絕對值函數:abs() 。 2、比較函數: cmp(x, y) ,需要兩個參數,如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1。 3、int()函數可以把其他數據類型轉換為整數。 4、str()函數把其他類型轉換成 str。 ...
  • 關於目後佐道IT教育 http://www.cnblogs.com/itpua/p/7710917.html 目後佐道IT教育的師資團隊 http://www.cnblogs.com/itpua/p/7712077.html 目後佐道IT教育正在打架報名中,歡迎高中生、大學生前來學習編程技術,招生面 ...
  • Twisted是用Python實現的基於事件驅動的網路引擎框架,Twisted支持許多常見的傳輸及應用層協議,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。就像Python一樣,Twisted也具有“內置電池”(batteries-included)的特點。Twi ...
  • 關於目後佐道IT教育 http://www.cnblogs.com/itpua/p/7710917.html 目後佐道IT教育的師資團隊 http://www.cnblogs.com/itpua/p/7712077.html 目後佐道IT教育正在打架報名中,歡迎高中生、大學生前來學習編程技術,招生面 ...
  • 關於目後佐道IT教育 http://www.cnblogs.com/itpua/p/7710917.html 高端技術顧問 1. leepoor 擁有12年的Web開發和架構經驗,在阿裡巴巴擔任高級架構師,參與阿裡巴巴基礎技術平臺開發和www.alibaba.com架構設計。擅長大型網站技術架構,工 ...
  • 題目描述 現有n個正整數,n≤10000,要求出這n個正整數中的第k個最小整數(相同大小的整數只計算一次),k≤1000,正整數均小於30000。 輸入輸出格式 輸入格式: 第一行為n和k; 第二行開始為n個正整數的值,整數間用空格隔開。 輸出格式: 第k個最小整數的值;若無解,則輸出“NO RES ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...