使用 PHP 原则 ORM 的复杂 WHERE 子句
我正在使用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和教义似乎正在去掉我括起来的括号:
$q->andWhere("(category1 IN $subcategory_in_clause
OR category2 IN $subcategory_in_clause
OR category3 IN $subcategory_in_clause)");