0
我正在使用yii2中的动态搜索模块,今天的任务是为列表创建过滤器。例如,下拉列表中您可以选择多个条件。在我们的情况下,这是一辆汽车的状态。因此,您可以选择汽车是处于活动状态还是非活动状态或已售出。但是有一种情况是用户想要同时搜索。 过滤效果很好,如果你搜索汽车的唯一国家,它生成的SQL语句:Yii2 multiple orFilterWhere
SELECT * FROM `gepkocsi` WHERE (((`allapot`='A')) OR ((`allapot`='F'))) AND (`torolt` IS NULL) LIMIT 20
它的工作原理,因为没有像车牌任何其他条件。现在让我们看看如果我们将该条件添加到搜索中会发生什么。 因此,目前我们搜索的车辆牌照平台包含我的信件,并且状态为活动或已注册。生成以下SQL:
SELECT * FROM `gepkocsi` WHERE (((`rendszam` LIKE '%i%') OR ((`allapot`='A'))) OR ((`allapot`='E'))) AND (`torolt` IS NULL) LIMIT 20
问题是,牌照(rendszam)shuold后是一个AND的insted或OR。这是由以下方法生成的。这导致我们成为问题的主要来源。
/**
* @param $fieldName
*/
public function filterList($fieldName) {
if (isset($fieldName) && !empty($this->$fieldName)) {
foreach ($this->$fieldName as $singleFieldName) {
$this->query->orFilterWhere(['or',
[$fieldName => $singleFieldName]]);
}
}
}
我想如果我分开添加所有字段名作为orFilter的参数它应该工作。你认为最好的做法是什么?或者Yii2有那么神奇的功能呢?
谢谢你的回答!