如何覆盖CActiveDataProvider方法默认情况下在Yii中以降序显示CGridview

时间:2014-01-09 05:40:00

标签: php mysql sorting activerecord yii

我的项目中有很多模型和网格视图,每个模型都有create_dttm字段。

我现在想如何覆盖我将添加CActiveDataProvider

的课程DESC Sort condition

'sort' => array(
    'defaultOrder' => 'create_dttm DESC',
)

这样它就可以用于我的所有网格视图,而不是在每个网格视图中添加条件。

示例:

public function search() {

    $criteria = new CDbCriteria;
    $criteria->compare('id', $this->id);
    $criteria->compare('name', $this->name, true);
    $criteria->compare('age', $this->age);
    $criteria->compare('create_dttm', $this->create_dttm, true);
    $criteria->compare('update_dttm', $this->update_dttm, true);

    return new CActiveDataProvider($this, array(
        'criteria' => $criteria,
        'pagination' => array(
            'pageSize' => 10,
        ),
        'sort' => array(
            'defaultOrder' => 'create_dttm DESC',
        )
    ));
}

我该如何处理?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

让每个模型从BaseModel类继承,并覆盖默认范围方法:

<?php
class BaseModel extends CActiveRecord {
...

    public function defaultScope() {
        return array(
            'order' => 'create_dttm DESC',
        );
    }

答案 1 :(得分:1)

我认为简单的方法是在每个模型上添加sort变量。

或者您可以使用此方法作为以下链接,但如果您使用这种方式,您也需要更改名称。

http://www.yiiframework.com/wiki/173/an-easy-way-to-use-escopes-and-cactivedataprovider/

所以我的建议是,在每个模型上添加排序。