2012-09-13 17 views
1

我有一個Book實體,它與Page實體具有One2Many關係。我想創建一個查詢,檢索至少有一頁的所有書籍。我做了:獲取具有某些元素的實體

 $qb = $this->getDoctrine() 
     ->getRepository('AcmeDemoBundle:Book') 
     ->createQueryBuilder('b');   
     ->leftJoin('b.pages','p') 
     ->having($qb->expr()->gt($qb->expr()->count('p'), 0)); 

     $books = $qb 
     ->getQuery() 
     ->getResult();     

問題是,雖然有很多書有頁面,但這個查詢只返回一本書。

創建的查詢是:

SELECT b FROM Acme\DemoBundle\Entity\Book b LEFT JOIN b.pages p HAVING COUNT(p) > 0 

這看起來好像沒什麼問題。任何想法可能是錯的?

回答

2

它更容易使用的

->innerJoin('b.pages','p') 

代替

->leftJoin('b.pages','p') 

你不需要聚合函數。簡而言之:這個innerjoin將只返回可以連接至少一個Page的書籍。

+0

你是對的,你的解決方案更好。謝謝! –

1

您應該像使用聚合函數一樣添加groupBy。例如

$qb = $this->getDoctrine() 
    ->getRepository('AcmeDemoBundle:Book') 
    ->createQueryBuilder('b');   
    ->leftJoin('b.pages','p') 
    ->groupBy('b.id') 
    ->having($qb->expr()->gt($qb->expr()->count('p'), 0)); 
+0

謝謝,忘了那件事。它完美地工作 –

相關問題