Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写Yii2和where()条件_Yii2 - Fatal编程技术网

重写Yii2和where()条件

重写Yii2和where()条件,yii2,Yii2,在我的yii2应用程序中,我希望将查询转换为: Post::find()->andWhere(['id'=>$id])->one(); 进入 因为这段代码无处不在,所以我不想遍历并手动更改每个查询。因此,我认为更容易的方法是重写一个类似于此方法的yii2基类:并检查是否将id作为列条件,我们只需对该条件进行一些转换 我应该覆盖哪个类,以便无论何时调用和where()和或where()和where(),我都可以轻松地更新和转换查询条件?如果选中了由gii生成的模型和生成Acti

在我的yii2应用程序中,我希望将查询转换为:

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()