Doctrine重复查询结果?

时间:2016-06-07 16:23:27

标签: symfony doctrine-orm

我有以下代码

$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添加了组,并修复了问题,任何人都可以告诉我为什么会发生这种情况?

1 个答案:

答案 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();

但是这样你就失去了首先使用存储库的目的。