私はyii2で動的検索モジュールを開発していますが、今日の課題はリストのフィルタを作成することです。たとえば、複数の条件を選択できるドロップダウンリストがあります。私たちの場合、それは車の状態です。したがって、車がアクティブか、非アクティブか、または販売されているかを選択できます。しかし、ユーザーが両方を検索したいというシナリオがあります。ナンバープレートのような任意の更なる条件がないので、それは動作しますYii2 multiple orFilterWhere
SELECT * FROM `gepkocsi` WHERE (((`allapot`='A')) OR ((`allapot`='F'))) AND (`torolt` IS NULL) LIMIT 20
: お車の状態のみを検索する場合、フィルタがうまく機能し、それは以下のSQLを生成します。ここで、その条件を検索に追加すると、何が起こるかを示します。 この時点で私は、ライセンスプレートにi文字が含まれている車を検索し、そのステータスは「アクティブ」または「Saled」です。次のSQLが生成されます。
SELECT * FROM `gepkocsi` WHERE (((`rendszam` LIKE '%i%') OR ((`allapot`='A'))) OR ((`allapot`='E'))) AND (`torolt` IS NULL) LIMIT 20
問題は、ナンバープレート(rendszam)shuoldがORのinstedであることです。これは以下の方法で生成されます。そして、これが問題の主な原因につながります。
/**
* @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はそれをするのに魅力的なことがありますか?
ありがとうございました!