我有以下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 EntitiesUser 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(DoctrineORMNoResultException $e) {
/*Your stuffs..*/
}