在Yii2中,我试图更改一个ActiveRecord模型,以便每次应用程序运行find()或findAll()时,它还会在条件的位置添加额外的内容。
例如,应用程序在Stock模型上调用find()方法:
$UsersStockFound = Stock::Find()
->where(['stockActive' => 1]);
所以,这就是我想要发生的事情,我希望模型在用户看到结果之前添加一个额外的条件。 我们假装租户参考已存放在$ this->租户之下 所以我想将它添加到上面的查询中,但是无缝地通过模型。
->AddWhere(['tenantId' => $this->tenantId]);
换句话说,整体就好像是:
$UsersStockFound = Stock::Find()
->where(['stockActive' => 1]);
->AddWhere(['tenantId' => $this->tenant]);
答案 0 :(得分:3)
您可以简单地覆盖模型中的find()方法:
public static function find()
{
return parent::find()->where(['storeActive' => 1]);
}
<强> Reference 强>
答案 1 :(得分:0)
上面没有任何东西可以在全球范围内工作..如果使用我们保留在覆盖查找中的地方将无法工作..以下是最好的方法...
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);
}
}