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

时间:2016-03-09 12:51:16

标签: activerecord model find yii2 multi-tenant

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

2 个答案:

答案 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);
    }
}