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有那麼神奇的功能呢?
謝謝你的回答!