2013-09-28 6 views
0

저는 Symfony 2와 Doctrine 2의 초보자입니다. Blog 포스트와 Comment의 두 모델이 있습니다. 그들은 안에 blog_id FK로 서로 관련이 있습니다.Doctrine 2를 사용하여 두 개의 간단한 테이블을 결합하려고 시도했습니다.

블로그 ID를 사용하는 간단한 방법을 만들고 싶습니다. 블로그 및 관련 코멘트를 검색합니다. 관련된 주석을 게으른 로딩에서 다른 쿼리를하는 대신. 정말 나는 보통 쿼리 빌더를 사용 교리 2에서 초보자 해요

<?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(); 

    } 
} 

,하지만 난 어떻게 그것을 사용하여 가입 만드는 아무 생각이 :

여기에 내가 뭘하려합니다. 그래서 DQL에서 시도해 보았습니다.

내가 getBlogWithComments 메서드를 호출하려고 할 때마다 그것은 저에게이 구문 오류를 제공합니다 :

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

내가 알고 싶은 모든이, 어떻게 는 쿼리 빌더 및 DQL을 사용하여 문을 가입 작성하는 것입니다? 그 문서를 아는 것은 불행히도 도움이되지 않습니다.

답변

1

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

좋습니다. 하지만 다시 실행하면 BloggerBlogBundle : Blog : show.html.twig at line 3'에는 키가 "0"인 배열의 Key title이보기에 오류가 발생합니다. –

+0

'블로그'(또는 당신이 그것을 무엇이라고 부르는 지)를 알려주는 것은 배열입니다. 따라서 각 블로그 게시물에 대해'blog' 배열을 반복하기 위해 나뭇 가지의 for 문을 사용해야합니다. – hcoat

+0

아, 그 것도 효과가있었습니다. 하지만 왜 배열 반환합니까 궁금해? 나는 그 의견으로 하나의 블로그 만 검색하고있다. 내가 확인했듯이, 배열에는 관련된 코멘트가있는 전체 블로그 객체를 포함하는 하나의 요소'blog [0]'만 있습니다. –

관련 문제