You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:09:05