有没有人知道如何根据Doctrine 2 QueryBuilder select()语句中的条件检索计数?
这是我到目前为止所尝试的......
我的第一次尝试是使用eq()尝试count()。我收到的错误是“预期的近括号,得到了平等。”
$qb->select($qb->expr()->count($qb->expr()->eq('t.id', '1')))
接下来我尝试使用having()来计算count()。我收到的错误说“已达到最大功能嵌套级别。”
$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
答案 0 :(得分:7)
除非您需要继续使用DQL,否则这可能会有所帮助:
public function MyAction() {
$this->doctrineContainer = Zend_Registry::get('doctrine');
$em = $this->doctrineContainer->getEntityManager();
$fords = $em->getRepository('My\Entity\Item')->findBy(array('type' => '1'));
$hondas = $em->getRepository('My\Entity\Item')->findBy(array('type' => '2'));
$fordQty = count($fords);
$hondaQty = count($hondas);
}
答案 1 :(得分:3)
使用查询构建器:
$query = $respository
->createQueryBuilder('u')
->select('count(u)')
->getQuery()
;
$total = $query->getSingleResult();
:)
答案 2 :(得分:2)
使用QueryBuilder,尝试:
$qb->select(" SUM(CASE WHEN t.id = 1 THEN 1 ELSE 0 END) as fords ")
->addSelect(" SUM(CASE WHEN t.id = 2 THEN 1 ELSE 0 END) as hondas ")