簡體   English   中英

Yii2倍數或過濾器

[英]Yii2 multiple orFilterWhere

我正在yii2中開發一個動態搜索模塊,今天的任務是為列表創建過濾器。 例如,下拉列表列出了可以選擇多個條件的位置。 在我們的情況下,它是汽車的狀態。 因此,您可以選擇汽車是處於活動狀態,非活動狀態還是已售出。 但是在某些情況下,用戶希望同時搜索兩者。 如果僅搜索汽車的狀態,則過濾器會很好地工作,它會生成以下SQL:

SELECT * FROM `gepkocsi` WHERE (((`allapot`='A')) OR ((`allapot`='F'))) AND (`torolt` IS NULL) LIMIT 20

之所以有效,是因為沒有其他條件,例如車牌。 現在讓我們看看如果將條件添加到搜索中會發生什么。 因此,目前我們搜索車牌上包含i字母且狀態為“有效”或“已出售”的汽車。 生成以下SQL:

SELECT * FROM `gepkocsi` WHERE (((`rendszam` LIKE '%i%') OR ((`allapot`='A'))) OR ((`allapot`='E'))) AND (`torolt` IS NULL) LIMIT 20

問題在於,在車牌(rendszam)shuold之后應該是AND或OR。 這是通過以下方法生成的。 這導致我們找到問題的主要根源。

/**
 * @param $fieldName
 */
public function filterList($fieldName) {
    if (isset($fieldName) && !empty($this->$fieldName)) {
        foreach ($this->$fieldName as $singleFieldName) {
            $this->query->orFilterWhere(['or',
                [$fieldName => $singleFieldName]]);
        }
    }
}

我認為,如果我將所有字段名稱分別添加為orFilterWhere的參數,則該字段應起作用。 您認為最佳做法是什么? 還是Yii2擁有神奇的魔法呢?

謝謝您的回答!

我找到了如何添加所有OR條件的解決方案。 只是Yii2產生IN積分。

/**
 * @param $fieldName
 */
public function filterList($fieldName) {
    if (isset($fieldName) && !empty($this->$fieldName)) {
        //$this->debug($this->$fieldName);
        $tomb = [];
        foreach ($this->$fieldName as $singleFieldName) {

            $tomb[$fieldName][] = $singleFieldName;

        }
        $this->query->andFilterWhere($tomb);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM