Yii CGridView过滤器,在过滤前修改数据


Yii CGridView filter, modify data before filtering

CGridView中的一个字段是"quota"字段,其值以字节为单位。为了让它变得可读,我使用了CFormatter:

'columns' => array(
    ...
    array(
        'name'  => 'quota',
        'value' => function($data) {
            return Yii::app()->format->formatSize($data->quota);
        },
    ),
),

现在,我想按兆字节过滤这一列中的数据。我修改了模型中的search()方法,如下所示:

$criteria->compare('(quota / 1024 / 1024)',$this->quota,true);

但我不喜欢它的样子。有正常的解决方法吗?非常感谢。

而不是

array(
    'name'  => 'quota',
    'value' => function($data) {
        return Yii::app()->format->formatSize($data->quota);
    },
),

你可以简单地做:

'quota:size',

现在,为了回答您的问题,使用compare函数是错误的,因为它在SQL查询中添加了一个"WHERE"子句。您希望使用order属性进行排序:

$criteria = new CDbCriteria;
$criteria->order = "quota DESC";

编辑(评论后):

$criteria = new CDbCriteria;
$criteria->addCondition('quota > '.intval($this->quota)*1024*1024);