活动记录的默认标准

Rus*_*Bes 0 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);
}
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是一个很好的做法(因为CActiveRecord's构造函数问"除非绝对必要,否则不要覆盖构造函数! ").谁能为这种情况提供建议?

小智 5

在你的模型中尝试这个.

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

}
Run Code Online (Sandbox Code Playgroud)

或者定义其他范围 Yii - 使用与关系中定义的范围的关系