如何为模型的所有搜索操作设置默认条件?

时间:2013-01-01 17:03:07

标签: php activerecord yii criteria

我有一个模特:

class Service extends CActiveRecord
{
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    public static function getMainPageItems()
    {
        return self::model()->findAll(array(
            'condition' => 'on_main = 1',
            'order' => 'pos ASC'
    ));

    public static function getNonMainPageItems()
    {
        return self::model()->findAll(array(
            'condition' => 'on_main = 0',
            'order' => 'pos ASC'
    ));
}

我想将模型的默认顺序设置为pos ASC

如何设置模型的默认顺序?

2 个答案:

答案 0 :(得分:8)

使用CActiveRecord::defaultScope()方法如下:

class Service extends CActiveRecord
{
    ...
    public function defaultScope(){
        return array(
            'order'=>'pos ASC'
        );
    }
    ...
}

这将添加到模型上的所有查找方法。请阅读scopesdefaultScopes以获取更多信息

答案 1 :(得分:0)

解决此问题的一种方法是将私有成员添加到名为$ order的父类。

您需要为它创建getter和setter(以便您可以在需要时更改defalut)

然后只需在每个需要它的函数的'order'元素中调用$this->$order