Я использую 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», «andWhere» и «addWhere»?
ОБНОВЛЕНИЕ Хорошо, похоже, что вы не можете выполнять сложные запросы с помощью 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)");