活动记录的默认标准

时间:2014-06-06 08:35:34

标签: yii

关于ActiveRecord使用的最佳做法,我有以下问题。

我的情况: 我有一个普通CActiveRecord的用户模型。 在许多情况下,我希望有“活动”用户列表,在WHERE条件“is_active = 1”的数据库中定义。此外,我希望函数find()findByAttributes()findByPk()等仅在用户处于活动状态时返回结果(例如在“密码请求”方案中)。

我总是可以在使用find()函数之前显式应用这个WHERE条件,但我正在寻找一种用更少的代码实现它的方法。

我想到了创建一个名为UserActive的子类并改变其构造函数的想法:

function __construct($scenario='insert') {
    parent::__construct($scenario);

    $criteria = new CDbCriteria();
    $criteria->condition = "is_active = 1";
    $this->setDbCriteria($criteria);
}

但我不确定这是否是一个很好的做法(因为CActiveRecord的构造函数要求“除非绝对必要,否则不要覆盖构造函数!”) 。任何人都可以为这种情况提供建议吗?

2 个答案:

答案 0 :(得分:5)

在您的模型中尝试此操作。

public function defaultScope() {
    return array(
               'condition'=>'is_active = 1',
            );

}

或定义其他范围 Yii - using relations with scopes defined in the relation

答案 1 :(得分:1)

没错,你永远不应该覆盖__construct()。 您可以使用模型范围。见http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes