Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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
Php 始终修改搜索条件的模型的find()方法_Php_Activerecord_Yii_Yii2 - Fatal编程技术网

Php 始终修改搜索条件的模型的find()方法

Php 始终修改搜索条件的模型的find()方法,php,activerecord,yii,yii2,Php,Activerecord,Yii,Yii2,我在一个模型实验室中声明了find方法,以修改SQL中的WHERE子句: public static function find() { return parent::find()->where(['deleted' => false]); } 它仅在直接调用find时修改搜索结果。就像这样: $dataProvider = new ActiveDataProvider([ 'query' => Lab::find(), ]); 或者像这样: $labs =

我在一个模型实验室中声明了find方法,以修改SQL中的WHERE子句:

public static function find()
{
    return parent::find()->where(['deleted' => false]);
}
它仅在直接调用find时修改搜索结果。就像这样:

$dataProvider = new ActiveDataProvider([
    'query' => Lab::find(),
]);
或者像这样:

$labs = Lab::find()->all();
但是,当对此方法的任何调用使用自己的where、where或andWhere时:

然后忽略内部修改


这是符合事实的,我可以理解。但是,如何强制我的模型总是返回修改后的结果呢。所以,不管它是如何命名的,它都会修改搜索条件。

好的,我已经在我这边测试过了。在查找覆盖中添加andWhere应该可以完成这项工作

试试看:

public static function find()
{
    return parent::find()->andWhere(['deleted' => false]);
}

你确定在第二种情况下使用andWhere不起作用吗?当然,当我在第二种情况下使用andWhere时,它会起作用。但是,这需要修改控制器中的方法调用或调用该方法的任何地方。因此,这不是这个问题的主题。我正在寻找一个解决方案,它将100%基于模型本身——也就是说,无论有人如何调用我的find方法,它总是会改变搜索参数。在给定的已删除记录的情况下应如此。我在考虑,如果afterFind在这种情况下对我来说不是一个解决方案,那么在覆盖查找中使用andWhere呢?如果他们使用andWhere呢?我认为,在给定的示例中,这种方法将在正常情况下使用,这意味着应该始终使用此标准。要使它工作,应该在哪里使用。If或Where将在第二个查询中使用,andWhere仍将在第一个查询中使用。
public static function find()
{
    return parent::find()->andWhere(['deleted' => false]);
}