как применить сортировку по методу модели в CGridView Yii

я имею Пользовательский режимл, которые содержат функцию, которая рассчитывает средний доход на пользователя. Теперь я хочу применить сортировку в CGridView к столбцу, который связан с функцией getAvgRevenue (). В то время как лицензия — это отношение в пользовательской модели.

Вот мой код,

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

?>

Сортировка применима на Идентификатор пользователя а также Эл. адрес но Столбец Средний доход не сортируется как указать метод модели в sort () CActiveDataprovider
Пожалуйста, помогите мне решить проблему.

1

Решение

Попробуй это:

$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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]