2012-03-18 55 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