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

Model's find() method that always modify search criteria

我在我的一个模型 (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,我可以理解。但是,如何强制我的模型总是 return 修改结果。所以,无论怎么叫,它都会修改搜索条件?

好的,我已经在我身边测试过了。在 find() 中添加 andWhere() - 重写应该可以完成工作。

试一试:

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