[英]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.