如何在Doctrine2中进行MySQL计数(*)


How would I do MySQL count(*) in Doctrine2?

我有以下Doctrine2查询:

$qb = $em->createQueryBuilder()
      ->select('t.tag_text, COUNT(*) as num_tags')
      ->from('CompanyWebsiteBundle:Tag2Post', 't2p')
      ->innerJoin('t2p.tags', 't')
      ->groupBy('t.tag_text')
;
$tags = $qb->getQuery()->getResult();

当运行时,我得到以下错误:

[Semantical Error] line 0, col 21 near '*) as num_tags': Error: '*' is not defined. 

如何在Doctrine2中进行MySQL计数(*)?

您应该可以这样做(将查询构建为字符串):

$query = $em->createQuery('SELECT COUNT(u.id) FROM Entities'User u');
$count = $query->getSingleScalarResult();

您试图在DQL中而不是在"条令2"中这样做。

您需要指定要计数的字段(注意,我没有使用术语列),这是因为您使用的是ORM,并且需要以OOP的方式进行思考。

$qb = $em->createQueryBuilder()
      ->select('t.tag_text, COUNT(t.tag_text) as num_tags')
      ->from('CompanyWebsiteBundle:Tag2Post', 't2p')
      ->innerJoin('t2p.tags', 't')
      ->groupBy('t.tag_text')
;
$tags = $qb->getQuery()->getResult();

但是,如果您需要性能,您可能希望使用NativeQuery,因为您的结果是一个简单的标量而不是对象。

As$query->getSingleScalarResult()需要至少一个结果,因此如果没有找到结果,则抛出无结果异常,因此使用try-catch块

try{
   $query->getSingleScalarResult();
}
catch('Doctrine'ORM'NoResultException $e) {
        /*Your stuffs..*/
}