Ich verwende die PHP Doctrine ORM, um meine Abfragen zu erstellen. Allerdings kann ich nicht ganz auf Figur scheint, wie die folgende WHERE-Klausel DQL (Doctrine Query Language) schreiben:Komplexe WHERE-Klauseln mit der PHP-Lehre ORM
WHERE name='ABC' AND (category1 = 'X' OR category2 = 'X' OR category3 = 'X')
AND price > 10
Wie kann ich angeben, wo die Klammern gehen?
Was ich zur Zeit in meinem PHP-Code haben, ist dies:
->where('name = ?', 'ABC')
->andWhere('category1 = ?', 'X')
->orWhere('category2 = ?', 'X')
->orWhere('category3 = ?', 'X')
->andWhere('price > ?', 10)
Aber das erzeugt so etwas wie
WHERE name='ABC' AND category1 = 'X' OR category2 = 'X' OR category3 = 'X'
AND price > 10
, die aufgrund der Reihenfolge der Operationen, nicht die gewünschten Ergebnisse nicht zurück.
Gibt es auch einen Unterschied zwischen den Methoden "where", "andWhere" und "addWhere"?
UPDATE Ok, scheint es, wie Sie nicht komplexe Abfragen mit DQL tun können, also habe ich versucht, die SQL manuell zu schreiben und die UndWo() -Methode hinzufügen verwenden. Aber ich bin mit WHERE..IN und Lehre scheint meine umschließenden Klammern werden Strippen:
$q->andWhere("(category1 IN $subcategory_in_clause
OR category2 IN $subcategory_in_clause
OR category3 IN $subcategory_in_clause)");
Eine andere Lösung finden Sie hier http://stackoverflow.com/a/7720723/251735 – Jekis