Yii2 覆盖 find() 以全局添加默认条件



>我必须使用

namespace commonmodels;
use Yii;
use yiidbActiveQuery;
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 方法。我怎么可能不需要在每个模型中使用此静态方法

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

commoncomponentsActiveRecord或模型内部(如果您愿意(

<?php
namespace commoncomponents;
use yiidbActiveRecord 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()方法的模型,将yiidbActiveRecord替换为commoncomponentsActiveRecord例如,如果我有一个Product模型并且我想默认向其添加条件,我将模型从

<?php
namespace commonmodels;
use Yii;
class Product extends yiidbActiveRecord {

<?php
namespace commonmodels;
use Yii;
class Product extends commoncomponentsActiveRecord{

最新更新