【发布时间】:2010-11-06 04:24:15
【问题描述】:
我正在使用 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)");
【问题讨论】:
-
另一个解决方案可以在这里找到stackoverflow.com/a/7720723/251735