我有一个计算列,我想要排序。 我有一个get方法...
public function getCur_margin() {
return number_format(($this->store_cost / $this->store_price) / $this->store_cost * 100, 2) . '%';
}
我跟着这个帖子......
CGridview custom field sortable
但现在它正在寻找数据库中的实际列。如何仅为此CActiveDataProvider临时使用<calculations> AS cur_margin
获取字段?
以下是提供商的控制器代码:
$dataProvider = new CActiveDataProvider('Products', array(
'criteria' => array(
'condition' => 'store_id IN (SELECT `id` FROM `stores` WHERE `user_id` = ' . Yii::app()->user->id . ')',
),
'pagination' => array(
'pageSize' => 15,
),
'sort'=>array(
'attributes'=>array(
'cur_margin' => array(
'asc' => 'cur_margin ASC',
'desc' => 'cur_margin DESC',
),
),
),
));
答案 0 :(得分:3)
您是否尝试在CDbCriteria
的{{3}}属性中指定自定义字段?
'select' => array(
..., // fields to select
'(<calculations>) AS cur_margin'
)
您不必声明getCur_margin()方法,只需在模型中声明公共$cur_margin
成员。所有必需的计算都将在SQL查询中完成。
您也可以参考select作为示例。