2013-09-28 18 views
0

我是Symfony 2和Doctrine 2的初學者。我有兩個模型BlogComment。他們通過blog_id FK在comment表內相互關聯。嘗試使用Doctrine 2加入兩個簡單表格

我只是想創建一個簡單的方法,需要一個博客ID,檢索該博客和相關評論。而不是在延遲加載相關注釋時進行另一個查詢。

這裏是我的嘗試:

<?php 

namespace Blogger\BlogBundle\Entity\Repository; 

use Doctrine\ORM\EntityRepository; 

class BlogRepository extends EntityRepository 
{ 

    public function getBlogWithComments($id) 
    { 
     $query = $this->getEntityManager()->createQuery(' 
        SELECT b, c 
        FROM BloggerBlogBundle:Blog b 
        WHERE b.id = :id 
        JOIN b.id c 
        WHERE b.id = c.blog'); 
     $query->setParameter("id", $id); 
     return $query->getResult(); 

    } 
} 

我真的是初學者的學說2.我通常使用查詢生成器,但我不知道如何使一個連接使用。所以在DQL中試過了,也找不出來。

它給了我這個語法錯誤,每當我打電話getBlogWithComments方法:

[Syntax Error] line 0, col 80: Error: Expected end of string, got 'JOIN'

所有我想知道的是,如何寫JOIN使用查詢生成器和DQL報表?知道文檔不是很有幫助,不幸的是。

回答

1

A JOIN與DQL是通過引用實體之間的關係來完成的,它只需要一種方式。我的意思是b.comment c是所有需要的,沒有必要參考c.blog

public function getBlogWithComments($id) 
{ 
    return $this->getEntityManager() 
      ->createQuery(' 
       SELECT b, c 
       FROM BloggerBlogBundle:Blog b 
       JOIN b.comment c 
       WHERE b.id = :id 
      ') 
      ->setParameter("id", $id) 
      ->getResult(); 

} 
+0

好的,這工作。但是當我再次運行它時,我在視圖中出現錯誤「鍵」標題「對於鍵爲」0「的數組在BlogBlogBu​​ndle:Blog:show.html.twig中不存在第3行。 –

+0

這就是告訴你'blog'(或者你稱之爲什麼)是一個數組。所以你需要用twig的'for'語句循環每個'blog'文章的'blog'數組。 – hcoat

+0

哦,那也行。但我想知道爲什麼它返回一個數組?我只用其評論來檢索一個博客。正如我所檢查的那樣,該數組只有一個元素'blog [0]',它包含了包含相關注釋的整個博客對象。 –