【发布时间】:2012-01-01 09:02:15
【问题描述】:
有谁知道如何根据 Doctrine 2 QueryBuilder select() 语句中的条件检索计数?
这是我迄今为止尝试过的......
我的第一次尝试是尝试 count() 和 eq()。我收到的错误是“预期的右括号,等于。”
$qb->select($qb->expr()->count($qb->expr()->eq('t.id', '1')))
接下来我尝试了 count() 和 have()。我收到的错误是“达到最大函数嵌套级别”。
$qb->select($qb->expr()->count($qb->having('t.id', '1')))
然后我用 where() 和 eq() 尝试了 count()。我再次得到“达到最大函数嵌套级别。”
$qb->select($qb->expr()->count($qb->where($qb->expr()->eq('t.id', '1'))))
然后我使用 in() 尝试了这些变化。他们都给出了语法错误“Expected FROM, got '('
$qb->select($qb->expr()->count($qb->expr()->in('t.id', array(1))))
$qb->select($qb->expr()->count($qb->expr()->in('t.id', 1)))
对于 in() 示例,我还尝试通过 setParameter() 将值作为变量传递,结果相同。
这是我尝试在 QueryBuilder 中编写的 MySQL 等价物:
SELECT
SUM(IF(type.id = 1, 1, 0)) AS 'fords',
SUM(IF(type.id = 2, 1, 0)) AS 'hondas'
FROM item
JOIN type ON item.type_id = type.id
【问题讨论】:
-
别忘了,你可以使用原生查询。有时它更快、更优雅。
标签: php mysql doctrine doctrine-orm subquery