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

时间:2014-09-09 10:43:08

标签: php yii

CGridView中的一个字段是'配额'字节值的字段。为了使它具有人类可读性,我使用了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);

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

1 个答案:

答案 0 :(得分:1)

而不是

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);