始终修改搜索条件的模型的 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]);
}
我在我的一个模型 (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]);
}