2014-10-01 50 views
1

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

這裏是我的代碼,

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()中指定模型方法 請幫我解決問題。

回答

0

試試這個:

$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/

+0

感謝UR迴應,我已經嘗試過,但它不起作用。沒有拼寫問題。 – 2014-10-02 11:07:11