2013-10-16 101 views
0

我有以下數據模型: 我有可以有帖子的類別。這些articals可以有很多類別。 NowIi想要選擇一個類別中的所有文章。學說多對多關係選擇

我試過到目前爲止:

$qb = $this->_em->createQueryBuilder() 
     ->select('c, p') 
     ->from('...Blog\Category', 'c') 
     ->leftJoin('c.posts', 'p') 
     ->where('c.id = :id') 
     ->orderBy('p.created', 'DESC') 
     ->setParameter(':id', $catId); 

現在我想把這個查詢送入whoch期望得到的所有帖子列表分頁包。

問題是,該查詢返回「類別」對象。

如何才能從類別中獲得帖子?

我使用的Symfony 2與KnpPaginatorBundle

+1

而不是選擇c(類別)和p(後)爲什麼不只是選擇p? – Chausser

回答

0

查詢是錯誤的。當您執行左連接時,它將從左表中選擇行。只要翻轉它們。

$qb = $this->_em->createQueryBuilder() 
     ->select('c, p') 
     ->from('c.posts', 'p') 
     ->leftJoin('...Blog\Category', 'c') 
     ->where($qb->expr()->andX(
      $qb->expr()->eq('c.id', ':id'), 
      $qb->expr()->eq('p.category_id', 'c.id') 
     ) 
     ->orderBy('p.created', 'DESC') 
     ->setParameter(':id', $catId); 
+0

但是,首先加入所有條目,然後選擇應該返回的條目,這不是很慢嗎? – Johni

+0

我不認爲它按照你說的方式行事。 – Pradeep