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);
}
}
在 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);
}
}