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