【发布时间】:2014-10-01 15:26:07
【问题描述】:
我有用户模式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 和 email,但 平均收入列 不可排序。如何在 CActiveDataprovider 的 sort() 中指定模型方法 请帮我解决问题。
【问题讨论】: