【发布时间】:2015-04-30 12:43:25
【问题描述】:
我在我的一个模型 (Lab) 中声明了 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()、orWhere() 或andWhere():
$labs = Lab::find()
->where(Lab::getWhereArray())
->orderBy('position')
->all();
然后内部修改被忽略。
这是根据docs,我可以理解。但是,如何强制我的模型始终返回修改后的结果。那么,不管怎么调用,它总是会修改搜索条件?
【问题讨论】:
-
第二种情况用andWhere()确定不行吗?
-
当然,当我在第二种情况下使用
andWhere()时,它会起作用。但是,这需要修改控制器中的方法调用或调用该方法的任何位置。因此,这不是这个问题的主题。我正在寻找一种解决方案,它将 100% 基于模型本身——即,无论有人如何调用我的find()方法,它都会总是改变搜索参数。在给定“已删除”记录的情况下应该如此。我正在考虑,如果afterFind在这种情况下不是我的解决方案? -
在覆盖
find()中使用andWhere怎么样。
标签: php activerecord yii yii2