Я использую ORM PHP Doctrine для создания моих запросов. Тем не менее, я не могу достаточно показаться, чтобы выяснить, как написать следующее условие WHERE с использованием DQL (Doctrine Query Language):Сложные предложения WHERE с использованием PHP Doctrine ORM
WHERE name='ABC' AND (category1 = 'X' OR category2 = 'X' OR category3 = 'X')
AND price > 10
Как я могу указать, где скобки идут?
То, что я в настоящее время в моем PHP код это:
->where('name = ?', 'ABC')
->andWhere('category1 = ?', 'X')
->orWhere('category2 = ?', 'X')
->orWhere('category3 = ?', 'X')
->andWhere('price > ?', 10)
Но это производит что-то вроде
WHERE name='ABC' AND category1 = 'X' OR category2 = 'X' OR category3 = 'X'
AND price > 10
, который, из-за порядка операций, не возвращает желаемых результатов.
Кроме того, существует ли разница между методами «где», «и где» и «addWhere»?
UPDATE Хорошо, кажется, что вы не можете делать сложные запросы с использованием DQL, поэтому я пытался писать SQL вручную и использовать метод andWhere(), чтобы добавить его. Тем не менее, я использую WHERE..IN и доктрина, кажется, зачистки мои ограждающих круглые скобки:
$q->andWhere("(category1 IN $subcategory_in_clause
OR category2 IN $subcategory_in_clause
OR category3 IN $subcategory_in_clause)");
Другое решение можно найти здесь http://stackoverflow.com/a/7720723/251735 – Jekis