亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

然后,寫代碼的時間到了,我們從 CommentController 開始,我們給它加一個 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,
    ));
}

著看起來沒什么了不起的,跟你用gii生成的crud代碼里的一樣。現(xiàn)在讓我來創(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

這是一個基本的 CGridView 只顯示評論的‘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)在如果你訪問以下這個頁面,發(fā)現(xiàn)文章的標(biāo)題的確顯示出來了

問題:

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

解決方案:

要想解決這個問題,我們得費點力氣。首先我們得給Commen模型添加一個 getter 和一個 setter ,比如說這么寫:

復(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;
}

接下來將這個屬性添加到 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'),
    );
}

這還不夠,最需要改動的是我們的 search 函數(shù)。首先我們要添一個 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'語法,我這么做的原因是為了避免 mysql 拋出‘column is ambigious error'。

為了保證這一切正常運行,我們必須傳遞 CSort 實例和 CDbCriteria 實例給 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)該可以了,效果如下圖所示:

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

相關(guān)文章

  • php使HTML標(biāo)簽自動補全閉合函數(shù)代碼

    php使HTML標(biāo)簽自動補全閉合函數(shù)代碼

    這個網(wǎng)上找到的自動補全閉合函數(shù)還挺不錯的,它可以根據(jù)你的html內(nèi)容自己補全閉合,確保HTMl代碼正確
    2012-10-10
  • php中PHPUnit框架實例用法

    php中PHPUnit框架實例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于php中PHPUnit框架實例用法內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-01-01
  • 實例分析基于PHP微信網(wǎng)頁獲取用戶信息

    實例分析基于PHP微信網(wǎng)頁獲取用戶信息

    本篇內(nèi)容主要給大家詳細(xì)分析了用PHP制作微信網(wǎng)頁來獲取用戶基本信息的過程,以及步驟講解。
    2017-11-11
  • thinkPHP框架樂觀鎖和悲觀鎖實例分析

    thinkPHP框架樂觀鎖和悲觀鎖實例分析

    這篇文章主要介紹了thinkPHP框架樂觀鎖和悲觀鎖,結(jié)合實例形式分析了框架樂觀鎖和悲觀鎖的原理及thinkPHP相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • openai createChatCompletion函數(shù)使用實例

    openai createChatCompletion函數(shù)使用實例

    這篇文章主要為大家介紹了openai createChatCompletion函數(shù)使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • php對微信支付回調(diào)處理的方法

    php對微信支付回調(diào)處理的方法

    這篇文章主要介紹了php對微信支付回調(diào)處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Codeigniter整合Tank Auth權(quán)限類庫詳解

    Codeigniter整合Tank Auth權(quán)限類庫詳解

    相交其他CodeIgniter的類庫,tank_auth,配置簡單,使用也簡單,并且作者也一直在更新。這篇文章主要介紹了Codeigniter整合Tank Auth權(quán)限類庫詳解,需要的朋友可以參考下
    2014-06-06
  • php中使用array_filter()函數(shù)過濾空數(shù)組的實現(xiàn)代碼

    php中使用array_filter()函數(shù)過濾空數(shù)組的實現(xiàn)代碼

    這篇文章主要介紹了php中使用array_filter()函數(shù)過濾空數(shù)組的實現(xiàn)代碼,這是瀏覽PHP手冊時無意發(fā)意的一個有意思的array_filter()函數(shù)用法,需要的朋友可以參考下
    2014-08-08
  • 深入理解Yii2.0樂觀鎖與悲觀鎖的原理與使用

    深入理解Yii2.0樂觀鎖與悲觀鎖的原理與使用

    這篇文章主要介紹了深入理解Yii2.0樂觀鎖與悲觀鎖的原理與使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-07-07
  • 摘自織夢CMS中的圖片處理類

    摘自織夢CMS中的圖片處理類

    這篇文章主要介紹了摘自織夢CMS中的圖片處理類,通過面向?qū)ο蟮姆绞捷^為詳細(xì)的實現(xiàn)了php針對圖片的縮略圖生成及水印添加等操作技巧,非常具有實用價值,需要的朋友可以參考下
    2015-08-08

最新評論