我有一个关于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 - 使用与关系中定义的范围的关系