2014-10-01 2 views
1

나는 사용자 당 평균 매출을 계산하는 함수를 포함하는 사용자 모드입니다. 이제 getAvgRevenue() 함수와 관련된 열의 CGridView에서 정렬을 적용하고 싶습니다. 라이센스는 User 모델의 관계입니다. 여기 CGridView에서 모델 방법에 정렬을 적용하는 방법 Yii

<?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', 
      ), 
     ) 
    )); 

?>

정렬에 적용 내 코드보기에서 컨트롤러에서

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, 
        ), 
      ), 
    )); 

입니다 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 열은 다음과 같아야합니다 :

답변

관련 문제