覆盖find()以在所有模型的全局条件中添加默认值

时间:2018-03-16 09:52:18

标签: yii2 yii2-advanced-app yii2-user

我必须使用

覆盖该方法
namespace common\models;
use Yii;
use yii\db\ActiveQuery;

class Addfindcondition extends ActiveQuery
{

    public function init()
    {

        $this->andOnCondition([$this->modelClass::tableName() . '.branch_id' => Yii::$app->user->identity->branch_id ]);
        parent::init();
    }
}

并像这样单独调用每个模型中的方法

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

现在我想全局覆盖find方法。我怎么可能不需要在每个模型中使用这种静态方法

1 个答案:

答案 0 :(得分:2)

您可以在find()型号的情况下覆盖ActiveRecord方法,因为您需要为应创建BaseModel的所有模型添加此项

如果您愿意,可以

common\components\ActiveRecord 或在您的模型中

<?php
namespace common\components;
use yii\db\ActiveRecord as BaseActiveRecord;

class ActiveRecord extends BaseActiveRecord{
    public static function find() {
       return parent::find ()
        ->onCondition ( [ 'and' ,
            [ '=' , static::tableName () . '.application_id' , 1 ] ,
            [ '=' , static::tableName () . '.branch_id' , 2 ]
        ] );
    }
}

然后将所有模型扩展到需要将此条件添加到find()方法的位置,例如,如果我有yii\db\ActiveRecord模型,则将common\components\ActiveRecord替换为Product我想在默认情况下添加条件,我将从

更改模型
<?php

namespace common\models;

use Yii;

class Product extends yii\db\ActiveRecord {

<?php

namespace common\models;

use Yii;

class Product extends common\components\ActiveRecord{