2016-07-20 16 views
0

Ich habe eine DB-Struktur wie folgt aus:yii2 mehrere Filter in Suchmodell

Addresses 
id primary key auto_increment 
name 
surname 
email 

categories 
id primary key auto_increment 
name 

address_category 
id primary key auto_increment 
addr_id 
cate_id 

auf der gridview, in Kategorien Filtersäule i eine select2 Verlängerung mit Mehrfachsatz auf wahr und auf dem Modell addressesSearch eingefügt haben ich habe diesen Code hinzugefügt:

->andFilterWhere(['address_category.cate_id'=> $category] 

es Funktion, aber ich möchte nicht wie, yii machen eine IN-Abfrage wie cate_id IN (4,5,6) statt i eine Abfrage benötigen, die die Adresse finden, die mit allen Kategorien markiert sind ausgewählt.

ich hoffe gut erklärt haben mein Problem

dank

+0

$ query-> andFilterWhere (['IN', 'address_category.cate_id', $ category]); – jithin

+0

diesen Code, den Sie gepostet haben, machen Sie das gleiche, das ich bereits habe. Ich versuche, besser zu erklären, wenn ich die Kategorie Kunde und Rechnung wähle, die ich nur Adresse suchen möchte, die mit Kunde und Rechnung getaggt werden und nicht sogar Klient und legal oder Klient und Technologie wie geschieht jetzt. danke – user3348353

+0

Versuch -> andFilterWhere (['address_category.cate_id' => $ Kategorie]) -> andFilterWhere (['count (address_category.cate_id)' => count ($ category)]); –

Antwort

0

select2 mehrere kehrt Komma Werte getrennt. teilen Sie es zuerst, vielleicht prüfen für ganzzahlige Werte

->andFilterWhere(['IN', 'address_category.cate_id', array_map('intval', explode(',', $category))]); 
0

finde ich eine Lösung, ich weiß nicht, ob der beste Weg ist, aber funktioniert.