Yii2 覆盖 find() 全局添加默认条件
Yii2 Override find() to add default condition globally
我必须使用
覆盖该方法
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 方法。我怎么可能不需要在每个模型中使用这个静态方法
对于 ActiveRecord
模型,您可以覆盖 find()
方法,因为您需要为所有模型添加此方法,您应该创建一个 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{
我必须使用
覆盖该方法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 方法。我怎么可能不需要在每个模型中使用这个静态方法
对于 ActiveRecord
模型,您可以覆盖 find()
方法,因为您需要为所有模型添加此方法,您应该创建一个 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{