我有以下代码
$this->em = $this->container->get('doctrine.orm.entity_manager');
$qb = $this->em->getRepository('CoreBundle:ServiceProvider')->createQueryBuilder('c');
$qb->select('count(venue.id) as vencount');
$qb->from('CoreBundle:ServiceProvider','venue');
$count = $qb->getQuery()->getOneOrNullResult()['vencount'];
这是写它返回了一些场地,但问题是这个数字是错误的,因为在ServiceProvider表中我只有5条记录,但这个查询返回25.我试图添加一条新记录,所以它们是6和是的,结果是36。
所以我按照ID添加了组,并修复了问题,任何人都可以告诉我为什么会发生这种情况?
答案 0 :(得分:1)
这是因为当您从存储库创建查询时,Doctrine会假定它是一个select并从中注入select和clausule。
这是使用getRepository方法获得的SQL:
SELECT count(i0_.id) AS sclr_0 FROM Entity i1_, Entity i0_
(请注意,实体在FROM中是两次。)
只使用:
$qb = $this->em->createQueryBuilder();
$qb->select('count(venue.id) as vencount');
$qb->from('CoreBundle:ServiceProvider','venue');
你得到:
SELECT count(i0_.id) AS sclr_0 FROM Entity i0_
这可能就是你要找的东西。
另一种方法是从存储库中获取它,但使用以下命令清除sql部分:
$qb = $this->em->getRepository('CoreBundle:ServiceProvider')->createQueryBuilder('c')->resetDQLParts();
但是这样你就失去了首先使用存储库的目的。