簡體   English   中英

如何在CGridView Yii中對模型方法應用排序

[英]how to apply sorting on model method in CGridView Yii

我有用戶模式 l,其中包含一個計算每個用戶的平均收入的函數。 現在,我想在與getAvgRevenue()函數關聯的列上的CGridView中應用排序。 而許可是用戶模型中的關系。

這是我的代碼,

 public class User{
     $user_id;
     $email;
     public function getAvgRevenue(){
        $count = 0;
        $revenue = 0;
        foreach ($this->license as $license){

            $revenue += $license->price;
            $count++;                
        }

        if($count!= 0){
            $averageRevenue = $revenue/$count;
            return $averageRevenue;
        }
        else{
            return null;
        }
      }

}

在控制器中

  $modelUser = new CActiveDataProvider('User', array( 
            'sort' => array(
                    'attributes' => array(
                            'user_id',
                            'email',
                            'averagerevenue'
                    ),
                    'defaultOrder' => array(
                            'user_id' => CSort::SORT_ASC,
                    ),
            ),
     ));

視野中

  <?php $this->widget('zii.widgets.grid.CGridView', array(
     'id' => 'user-grid',
    'dataProvider' => $modelUser,
     'columns' => array(
            array(
                    'header' => 'User ID',
                    'name' => 'user_id',
            ),
            array(
                    'header' => 'Email',
                    'name' => 'email',
            ),
            array(
                'header'=>'Average Revenue',
                'value'=>'$data->averagerevenue',
            ),
        )
    ));

?>

排序適用於user_id電子郵件,但“ 平均收入”列不可排序。 如何在CActiveDataprovider的sort()中指定模型方法,請幫助我解決問題。

嘗試這個:

$modelUser = new CActiveDataProvider('User', array( 
        'sort' => array(
                'attributes' => array(
                        'user_id',
                        'email',
                        'avgRevenue' //here's the change for you
                ),
                'defaultOrder' => array(
                        'user_id' => CSort::SORT_ASC,
                ),
        ),
 ));

並且您的gridview列應為:

array(
            'header'=>'Average Revenue',
            'value'=>'avgRevenue',
        ),

您可以在此處閱讀更多信息:

http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM