我必须使用
覆盖该方法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方法。我怎么可能不需要在每个模型中使用这种静态方法
答案 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{