Model的find()方法总是修改搜索条件

时间:2015-04-30 12:43:26

标签: php activerecord yii yii2

我在我的一个模型(find())中声明了Lab方法来修改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,这是可以理解的。但是,如何强制我的模型始终返回修改后的结果。那么,无论如何调用它,它总会修改搜索条件?

1 个答案:

答案 0 :(得分:0)

哦,我已经在我这边测试过了。在andWhere()中添加find() - 覆盖应该可以胜任。

试试吧:

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