2012-03-18 72 views
1

我有一个实体驱动程序和一个实体车。一位司机有很多车。 我有以下的dql查询:symfony2/doctrine2 - dql语句onetoMany

$query = $this->getEntityManager()->createQuery('select d, c FROM driver d JOIN d.cars c WHERE c.color=:color');     
$query->setParameter('color', $color); 
$query->setFirstResult((int)$offset ? $offset*15 : 0); 
$query->setMaxResults(15); 

结果列表有5行。但是当我在控制台中执行创建的sql查询时,那么我有15行。 当我将连接类型更改为左连接时,行数不是由驱动程序计数。但我使用寻呼机阅读有红色汽车的司机。

有人知道我在做什么错吗? 非常感谢。

回答

3

当您使用Doctrine执行连接查询时,每个实体都会返回多于一行的行。如果您对这些查询使用setMaxResults,则会放弃一些实体。

阅读:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#first-and-max-result-items-dql-query-only

解决办法是在这里:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/pagination.html

+0

伟大的答案!关于分页,阅读它,我只能假设它会是相同的较大数据集的杀手昂贵的操作... – 2012-03-19 00:15:24

+0

缓存是你的朋友在这种情况下 – Maxence 2012-03-19 13:29:04

+0

太棒了!非常感谢你 – 2012-03-20 20:41:26