Yii2全局重写find()方法添加默认条件,无需逐个模型配置
如何在Yii2中全局重写find()方法以统一添加默认查询条件?
你当前的做法是自定义了继承自ActiveQuery的Addfindcondition类,然后在每个模型里单独重写find()方法来返回这个自定义Query实例。要实现全局统一处理,不用每个模型都写重复代码,只需要创建一个基础ActiveRecord基类,让所有业务模型都继承它就可以了,具体步骤如下:
步骤1:创建全局基础ActiveRecord类
新建一个继承自yii\db\ActiveRecord的基类,比如放在common\models目录下的BaseActiveRecord.php,在里面重写find()方法,统一返回你的Addfindcondition实例:
namespace common\models; use yii\db\ActiveRecord; class BaseActiveRecord extends ActiveRecord { /** * 重写find方法,返回自定义的Query类实例 * @return Addfindcondition */ public static function find() { return new Addfindcondition(get_called_class()); } }
步骤2:让所有业务模型继承这个基类
把你原来所有继承yii\db\ActiveRecord的模型,改成继承这个BaseActiveRecord就可以了,比如:
namespace common\models; // 原来的:use yii\db\ActiveRecord; // 现在改成继承我们的基类 class YourModel extends BaseActiveRecord { // ... 模型原有代码保持不变 }
这样一来,所有继承BaseActiveRecord的模型,调用find()方法时都会自动使用你的Addfindcondition类,自动带上branch_id的默认查询条件,再也不用每个模型都重复写find()方法了。
另外补充一点:如果后续你的Addfindcondition里的默认条件需要根据不同模型做调整,还可以在基类里增加一个可重写的方法来动态获取默认条件,不过就你当前的需求来说,上面的方案已经完全够用了。
内容的提问来源于stack exchange,提问作者rajwa766
相关产品推荐
相关产品推荐

