我在这里覆盖了find()
方法
class ActiveRecord extends BaseActiveRecord{
public static function find() {
return parent::find()
->where(['=',static::tableName().'.company_id',Yii::$app->user->identity->company_id])
->andWhere(['=',static::tableName().'.branch_id',Yii::$app->user->identity->branch_id]);
}
}
现在如果我使用这样的条件
\common\models\Order::find()->where(['stastus'=>'3'])->count();
Active Record全局条件在我之前执行 在Order模型中使用,之后使用Order Model来覆盖 积极记录全球状况。
如果我使用像这样的Active Record条件
class ActiveRecord extends BaseActiveRecord{
public static function find() {
return parent::find()
->andWhere(['=',static::tableName().'.company_id',Yii::$app->user->identity->company_id])
->andWhere(['=',static::tableName().'.branch_id',Yii::$app->user->identity->branch_id]);
}
}
在我的本地模型中,压倒全球状况。困难 我要覆盖每个地方和地点。
答案 0 :(得分:1)
您应该将where
中的andWhere
和onCondition
更改为BaseActiveRecord
,我认为这是 \yii\db\ActiveRecord
的别名作为parent::find()
的{{1}}返回对象,如果您查看ActiveQuery
方法,则返回到行
<强> find()
强>
\yii\db\ActiveRecord
您可以在此处customizing-query-class
看到添加额外条件
return Yii::createObject(ActiveQuery::className(), [get_called_class()]);
现在,如果你打电话
class ActiveRecord extends BaseActiveRecord{
return parent::find ()
->onCondition ( [ 'and' ,
[ '=' , static::tableName () . '.application_id' , 1 ] ,
[ '=' , static::tableName () . '.branch_id' , 2 ]
] );
}
它将生成以下查询
\common\models\Order::find()->where(['status'=>'3'])->createCommand()->rawSql;
答案 1 :(得分:0)
这就是Yii2 ActiveRecord
的工作方式。当您调用方法where()
时,它会重置条件,即使它不是空的,当您调用andWhere()
时,它会为现有条件添加新条件。