Я использую ORM PHP Doctrine для создания моих запросов. Однако я не могу представить, как написать следующее предложение WHERE с использованием DQL (Doctrine Query Language):
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
который из-за порядка операций не возвращает ожидаемые результаты.
Кроме того, существует ли разница между методами "where", "и где" и "addWhere"?
UPDATE Ок, похоже, вы не можете выполнять сложные запросы с помощью DQL, поэтому я пытаюсь написать SQL вручную и использовать метод andWhere() для его добавления. Тем не менее, я использую WHERE..IN и Doctrine, похоже, удаляет заключенные круглые скобки:
$q->andWhere("(category1 IN $subcategory_in_clause
OR category2 IN $subcategory_in_clause
OR category3 IN $subcategory_in_clause)");