最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Yii中CGridView關(guān)聯(lián)表搜索排序方法實(shí)例詳解

 更新時(shí)間:2014年12月03日 11:37:30   投稿:shichen2014  
這篇文章主要介紹了Yii中CGridView關(guān)聯(lián)表搜索排序方法,以實(shí)例形式詳細(xì)分析了CGridView關(guān)聯(lián)表搜索排序的實(shí)現(xiàn)過(guò)程與搜索結(jié)果出現(xiàn)問(wèn)題的解決方法,是非常實(shí)用的技巧,需要的朋友可以參考下

本文實(shí)例講述了Yii中CGridView關(guān)聯(lián)表搜索排序方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

在Yii CGridView 關(guān)聯(lián)表搜索排序?qū)崿F(xiàn)方法有點(diǎn)復(fù)雜,今天看了一老外寫(xiě)的了篇游戲,下面我整理一下與各位朋友分享一下,相信會(huì)對(duì)大家Yii框架的學(xué)習(xí)有所幫助。

首先,檢查你的blog demo里的protectedmodelsComment.php,確保Comment模型有一個(gè)search的方法,如果沒(méi)有,就用gii生成一個(gè),我下載到的blog demo里倒是沒(méi)有。

然后,寫(xiě)代碼的時(shí)間到了,我們從 CommentController 開(kāi)始,我們給它加一個(gè) actionList:

復(fù)制代碼 代碼如下:
public function actionList()
{
    $model=new Comment('search');
    $model->unsetAttributes();
    if(isset($_GET['Comment']))
        $model->attributes=$_GET['Comment'];
 
    $this->render('list',array(
        'model'=>$model,
    ));
}

著看起來(lái)沒(méi)什么了不起的,跟你用gii生成的crud代碼里的一樣。現(xiàn)在讓我來(lái)創(chuàng)建view,在 /protected/views/comment/ 目錄下創(chuàng)建list.php然后粘貼以下代碼

復(fù)制代碼 代碼如下:
<?php $this->breadcrumbs=array(
    'Comments',
);
?>
 
<h1>Manage Comments</h1>
 
<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns' => array(
                'content',
                'post.title',
                'status',
                'author'
        ),
));
?>

Comment List

這是一個(gè)基本的 CGridView 只顯示評(píng)論的‘content', ‘status' and ‘a(chǎn)uthor', 和文章的標(biāo)題。我們假設(shè)想要往這張list里添加一列文章的標(biāo)題,我們只需要添加post.title 就行了:

復(fù)制代碼 代碼如下:
'columns'=>array(
    'content',
    'post.title',
    'status',
    'author',
),

現(xiàn)在如果你訪問(wèn)以下這個(gè)頁(yè)面,發(fā)現(xiàn)文章的標(biāo)題的確顯示出來(lái)了

問(wèn)題:

如果你仔細(xì)瞅瞅這個(gè)頁(yè)面你會(huì)發(fā)現(xiàn)你無(wú)法搜索文章標(biāo)題,你也沒(méi)辦法按文章標(biāo)題排序,這是因?yàn)?CGridView 在給定的 column name 里面發(fā)現(xiàn)了一個(gè)‘.',也就是 post.title 的點(diǎn)。如果有點(diǎn)號(hào)的話,它就不會(huì)生成搜索框。

解決方案:

要想解決這個(gè)問(wèn)題,我們得費(fèi)點(diǎn)力氣。首先我們得給Commen模型添加一個(gè) getter 和一個(gè) setter ,比如說(shuō)這么寫(xiě):

復(fù)制代碼 代碼如下:
private $_postTitle = null;
public function getPostTitle()
{
    if ($this->_postTitle === null && $this->post !== null)
    {
        $this->_postTitle = $this->post->title;
    }
    return $this->_postTitle;
}
public function setPostTitle($value)
{
    $this->_postTitle = $value;
}

接下來(lái)將這個(gè)屬性添加到 rules 函數(shù)里:

復(fù)制代碼 代碼如下:
public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('content, author, email', 'required'),
        array('author, email, url', 'length', 'max'=>128),
        array('email','email'),
        array('url','url')
 
        array('content, postTitle, status, author', 'safe', 'on'=>'search'),
    );
}

這還不夠,最需要改動(dòng)的是我們的 search 函數(shù)。首先我們要添一個(gè) criteria:

復(fù)制代碼 代碼如下:
$criteria=new CDbCriteria;
$criteria->with = "post"; // 確保查詢 post 表
 
$criteria->compare('t.content',$this->content,true);
$criteria->compare('t.status',$this->status);
$criteria->compare('t.author',$this->author,true);
$criteria->compare('post.title', $this->postTitle,true);

然后我們添加排序:

復(fù)制代碼 代碼如下:
$sort = new CSort();
$sort->attributes = array(
    'defaultOrder'=>'t.create_time DESC',
    'content'=>array(
        'asc'=>'t.content',
        'desc'=>'t.content desc',
    ),
    'status'=>array(
        'asc'=>'t.status',
        'desc'=>'t.status desc',
    ),
    'author'=>array(
        'asc'=>'t.author',
        'desc'=>'t.author desc',
    ),
    'postTitle'=>array(
        'asc'=>'post.title',
        'desc'=>'post.title desc',
    ),
);

你也許注意到了我在使用完整的 ‘tablename'.'columnname'語(yǔ)法,我這么做的原因是為了避免 mysql 拋出‘column is ambigious error'。

為了保證這一切正常運(yùn)行,我們必須傳遞 CSort 實(shí)例和 CDbCriteria 實(shí)例給 CActiveDataProvider :

復(fù)制代碼 代碼如下:
return new CActiveDataProvider('Comment', array(
    'criteria'=>$criteria,
    'sort'=>$sort
));

return new CActiveDataProvider('Comment', array(
    'criteria'=>$criteria,
    'sort'=>$sort
));

現(xiàn)在我們要做的就是修改我們的 view 以便它在 CGridView 顯示想要顯示的屬性:

復(fù)制代碼 代碼如下:
'columns'=>array(
    'content',
    'postTitle',
    'status',
    'author',
),

刷新一下,應(yīng)該可以了,效果如下圖所示:

希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • php計(jì)算多個(gè)集合的笛卡爾積實(shí)例詳解

    php計(jì)算多個(gè)集合的笛卡爾積實(shí)例詳解

    笛卡爾積又叫笛卡爾乘積,是一個(gè)叫笛卡爾的人提出來(lái)的。 簡(jiǎn)單的說(shuō)就是兩個(gè)集合相乘的結(jié)果。具體的定義要看看有關(guān)代數(shù)系的書(shū)的定義。這篇文章主要給大家介紹了利用php計(jì)算多個(gè)集合的笛卡爾積的方法實(shí)例,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • PHP中Fatal error session_start()錯(cuò)誤解決步驟

    PHP中Fatal error session_start()錯(cuò)誤解決步驟

    這篇文章主要介紹了PHP中Fatal error session_start()錯(cuò)誤解決步驟,著重于錯(cuò)誤的排除步驟,一步一步排查下去,肯定可以解決這個(gè)錯(cuò)誤,需要的朋友可以參考下
    2014-08-08
  • PHP函數(shù)引用返回的實(shí)例詳解

    PHP函數(shù)引用返回的實(shí)例詳解

    其實(shí)PHP函數(shù)引用與php中變量引用一樣,都使用的是&符號(hào)了,那么今天我們就一起來(lái)看看函數(shù)的引用返回的一些例子,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • php reset() 函數(shù)指針指向數(shù)組中的第一個(gè)元素并輸出實(shí)例代碼

    php reset() 函數(shù)指針指向數(shù)組中的第一個(gè)元素并輸出實(shí)例代碼

    在php中,當(dāng)我們使用next函數(shù)或end函數(shù)將數(shù)組內(nèi)部針指指向數(shù)組最后一個(gè)元素的時(shí)候,如果再需要將內(nèi)部指針指向第一個(gè)元素,可以使用reset() 函數(shù)來(lái)實(shí)現(xiàn),本文章向大家講解reset() 函數(shù)的基本語(yǔ)法及使用實(shí)例,需要的朋友可以參考下
    2016-11-11
  • PHP寫(xiě)UltraEdit插件腳本實(shí)現(xiàn)方法

    PHP寫(xiě)UltraEdit插件腳本實(shí)現(xiàn)方法

    PHP寫(xiě)UltraEdit插件腳本實(shí)現(xiàn)方法,需要的朋友可以從參考下。
    2011-12-12
  • laravel結(jié)合vue添加權(quán)限的實(shí)現(xiàn)示例

    laravel結(jié)合vue添加權(quán)限的實(shí)現(xiàn)示例

    本文將結(jié)合實(shí)例代碼,介紹laravel結(jié)合vue添加權(quán)限,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 完美的php分頁(yè)類

    完美的php分頁(yè)類

    這篇文章主要分享了一段完美的php分頁(yè)類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • thinkPHP實(shí)現(xiàn)上傳圖片及生成縮略圖功能示例

    thinkPHP實(shí)現(xiàn)上傳圖片及生成縮略圖功能示例

    這篇文章主要介紹了thinkPHP實(shí)現(xiàn)上傳圖片及生成縮略圖功能,結(jié)合實(shí)例形式分析了thinkPHP圖片上傳及縮略圖設(shè)置、生成、保存、數(shù)據(jù)庫(kù)寫(xiě)入等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • weiphp微信公眾平臺(tái)授權(quán)設(shè)置

    weiphp微信公眾平臺(tái)授權(quán)設(shè)置

    本文給大家分享的是一款開(kāi)源的微信公眾平臺(tái)weiphp的授權(quán)設(shè)置教程,非常的實(shí)用,有使用weiphp平臺(tái)的小伙伴可以參考下。
    2016-01-01
  • 實(shí)現(xiàn)laravel 插入操作日志到數(shù)據(jù)庫(kù)的方法

    實(shí)現(xiàn)laravel 插入操作日志到數(shù)據(jù)庫(kù)的方法

    今天小編就為大家分享一篇實(shí)現(xiàn)laravel 插入操作日志到數(shù)據(jù)庫(kù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10

最新評(píng)論

孝昌县| 渝北区| 汕头市| 辉南县| 竹溪县| 罗定市| 泗水县| 梅州市| 古蔺县| 蚌埠市| 弋阳县| 绵阳市| 金华市| 泉州市| 广丰县| 南澳县| 衡水市| 五大连池市| 安康市| 宜君县| 秦安县| 延川县| 安陆市| 邮箱| 家居| 固始县| 新干县| 乌审旗| 日土县| 电白县| 繁峙县| 玉山县| 富川| 武冈市| 包头市| 阿瓦提县| 贵州省| 南和县| 万盛区| 左权县| 山阳县|