CGridView中的Yii可排序列

时间:2013-06-20 07:21:01

标签: sorting yii cgridview cactivedataprovider

我有一个计算列,我想要排序。 我有一个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',
            ),
        ),
    ),
));

1 个答案:

答案 0 :(得分:3)

您是否尝试在CDbCriteria的{​​{3}}属性中指定自定义字段?

'select' => array(
    ...,   // fields to select
    '(<calculations>) AS cur_margin'
)

您不必声明getCur_margin()方法,只需在模型中声明公共$cur_margin成员。所有必需的计算都将在SQL查询中完成。

您也可以参考select作为示例。