2013-10-22 20 views
2

如何在已給定連接的關聯對象數的DQL實體中過濾?使用DQL只選擇給定數量的關聯對象的實體

例如:

$qb = $this->createQueryBuilder('u'); 
    $qb->where('COUNT(u.moods) > 1'); 

哪裏u.moods是一個一對多的關係,爲用戶?

+0

我認爲有兩種方式,一種是僅計算你的ArrayCollection對象數量的關聯對象。或者,您實際上可以查詢關聯的實體(IN())。 – Pradeep

回答

2

您可以使用此查詢生成器配置。

$qb = $this->createQueryBuilder('u'); 
$qb 
    ->select(array('u')) 
    ->from('User', 'u') 
    ->innerJoin('u.moods', 'm') 
    ->having(
     $qb->expr()->gt(
      $qb->expr()->count('m'), 1 
     ) 
    ); 

return $qb->getQuery()->getResult(); 

或者如果你喜歡DQL

$dql = "SELECT u FROM User u JOIN u.moods m HAVING COUNT(m) > 1"; 

$query = $this->createQuery($dql); 

return $query->getResult();