【问题标题】:How to override CActiveDataProvider Method to show CGridview in descending order by default in YiiYii中如何覆盖CActiveDataProvider方法以降序显示CGridview
【发布时间】:2014-01-09 05:39:59
【问题描述】:

我的项目中有很多模型和网格视图,每个模型都有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',
        )
    ));
}

我该如何处理?

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql sorting activerecord yii


    【解决方案1】:

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

    <?php
    class BaseModel extends CActiveRecord {
    ...
    
        public function defaultScope() {
            return array(
                'order' => 'create_dttm DESC',
            );
        }
    

    【讨论】:

    • 我能否在 CActiveRecord 中添加 defaultScope() 方法,而不是在每个模型中覆盖 basemodel 类。
    • 更新 CActiveRecord 不是好习惯,因为它是框架的一部分。所以,Samuel 用基模型类继承所有模型类并添加 defaultScope() 方法的方法将是不错的一种。
    【解决方案2】:

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

    或者你可以使用下面链接的方法,但是如果你使用这种方法,你也需要更改名称。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多