重写Yii2和where()条件
在我的yii2应用程序中,我希望将查询转换为:重写Yii2和where()条件,yii2,Yii2,在我的yii2应用程序中,我希望将查询转换为: Post::find()->andWhere(['id'=>$id])->one(); 进入 因为这段代码无处不在,所以我不想遍历并手动更改每个查询。因此,我认为更容易的方法是重写一个类似于此方法的yii2基类:并检查是否将id作为列条件,我们只需对该条件进行一些转换 我应该覆盖哪个类,以便无论何时调用和where()和或where()和where(),我都可以轻松地更新和转换查询条件?如果选中了由gii生成的模型和生成Acti
Post::find()->andWhere(['id'=>$id])->one();
进入
因为这段代码无处不在,所以我不想遍历并手动更改每个查询。因此,我认为更容易的方法是重写一个类似于此方法的yii2基类:并检查是否将id
作为列条件,我们只需对该条件进行一些转换
我应该覆盖哪个类,以便无论何时调用
和where()
和或where()
和where()
,我都可以轻松地更新和转换查询条件?如果选中了由gii生成的模型和生成ActiveQuery
您可以在生成的查询类中找到此代码
/*public function active()
{
return $this->andWhere('[[status]]=1');
}*/
像这样调用函数
Post::find()->active()->one()
祝你好运这件事不能通过帮助程序实现。你必须为此重写yii\db\Query类。是的,是真的,但假设这是重写核心类的相同方法,yii\dbQuery是正确的类吗?可能是相同的,但帮助程序的行为会不同。如果是helper,您必须手动更改我添加的所有
Yii::$container->set('Yii\db\ActiveQuery','common\components\ActiveQuery')
到bootstrap.php
和我的新ActiveQuery扩展了yii的ActiveQuery。这管用!但是,它不适用于yii\db\Query
:\yii\db\Query
是一个单独的类,您还必须通过依赖项注入来覆盖它,就像您对yii\db\ActiveQuery
所做的那样
Post::find()->active()->one()