我正在使用PHP Doctrine ORM构建我的查询。然而,似乎我无法想出如何使用DQL(Doctrine Query Language)编写以下WHERE子句:
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)");