Sorting CGridView中的Yii可排序列

Sorting CGridView中的Yii可排序列,sorting,yii,cgridview,cactivedataprovider,Sorting,Yii,Cgridview,Cactivedataprovider,我有一个计算过的列,我想排序。 我有一个得到它的方法 public function getCur_margin() { return number_format(($this->store_cost / $this->store_price) / $this->store_cost * 100, 2) . '%'; } 我跟着这个线索 但现在它正在数据库中查找实际列。如何使用作为当前页边距临时获取此CActiveDataProvider的字段 以下

我有一个计算过的列,我想排序。 我有一个得到它的方法

public function getCur_margin() {
        return number_format(($this->store_cost / $this->store_price) / $this->store_cost * 100, 2) . '%';
    }
我跟着这个线索

但现在它正在数据库中查找实际列。如何使用
作为当前页边距
临时获取此CActiveDataProvider的字段

以下是提供程序的控制器代码:

$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',
            ),
        ),
    ),
));

您是否尝试在
CDbCriteria
的属性中指定自定义字段

'select' => array(
    ...,   // fields to select
    '(<calculations>) AS cur_margin'
)
“选择”=>数组(
…,//要选择的字段
“()作为当前页边距”
)
然后,您不必声明getCur\u margin()方法,只需在模型中声明一个public
$cur\u margin
成员。所有必需的计算都将在SQL查询中完成


您也可以引用作为示例。

您是否尝试在
CDbCriteria
的属性中指定自定义字段

'select' => array(
    ...,   // fields to select
    '(<calculations>) AS cur_margin'
)
“选择”=>数组(
…,//要选择的字段
“()作为当前页边距”
)
然后,您不必声明getCur\u margin()方法,只需在模型中声明一个public
$cur\u margin
成员。所有必需的计算都将在SQL查询中完成


您也可以引用作为示例。

该列显示,但它没有值,并且仍然不可排序):结果表明我在错误的位置添加了select。让我们回顾一下:gridvieww中的条件、比较和列;这很有效,非常感谢!你把select放在哪里?列显示出来了,但它没有值,而且仍然不可排序):结果是我在错误的位置添加了select。让我们回顾一下:gridvieww中的条件、比较和列;这很有效,非常感谢!你把选择放在哪里?这可能有帮助:这可能有帮助: