yii2 为每个查找添加 where 条件模型

yii2 add where condition model for every find

在 Yii2 中,我正在尝试更改 ActiveRecord 模型,以便每次应用程序运行 find() 或 findAll() 时,它也会在条件中添加一个额外的位置。

例如,应用程序调用 Stock 模型的 find() 方法:

$UsersStockFound = Stock::Find()
->where(['stockActive' => 1]);

所以,这就是我想要发生的事情,我希望模型在用户看到结果之前添加一个额外的条件。 让我们假装我已经将租户引用存储在 $this->tenant 下 所以我想将它添加到上面的查询中,但是通过模型无缝地添加。

->AddWhere(['tenantId' => $this->tenantId]);

所以换句话说,整体就像是:

$UsersStockFound = Stock::Find()
->where(['stockActive' => 1]);
->AddWhere(['tenantId' => $this->tenant]);

您可以简单地覆盖模型中的 find() 方法:

public static function find()
{
    return parent::find()->where(['storeActive' => 1]);
}

None 以上解决方案对我有用.. 如果你有“where”用法,无论你做什么重写,find 都不会工作..

我找到了自己的解决方案,如下所示,它将覆盖所有 ORM 调用。

class model extends \yii\db\ActiveRecord
{

    public static function find()
    {
              
        return new CustomActiveRecordQuery(get_called_class());
    }

}
class CustomActiveRecordQuery extends ActiveQuery
{
    // ...
        public function prepare($builder)
    {
            $this->andWhere(['status' => 'Active']);
            return parent::prepare($builder);
    }
}