2012-10-21 2 views
0

나는 앨범, 컨텐츠, 파일 및 주석 엔터티를 가지고 있는데, 여기서 주석과 파일은 컨텐츠의 관계이고 컨텐츠는 앨범과 관련됩니다.Doctrine 2 엔티티 관계로드 최적화

하나의 Content 엔티티에서 모든 관계 (파일 및 주석 엔티티)를 검색하고 (다른 컨텐츠에 대해서는로드하지 않으려합니다.) 데이터베이스에 대한 쿼리는 2 개를 넘지 않아야합니다.

단일 쿼리를 사용하여 관계를 검색하고 엔터티 개체를 채우는 좋은 방법은 무엇입니까?

예컨대

$album = $em->createQuery('SELECT a,c FROM Album JOIN a.contents c WHERE a.id = :id')->getOneOrNullResult(); 

foreach ($album->getContents() as $content) { 
    if ($content->getId() == $id) { 
     // Load all (relevant) relations for this content in a single query with joins 
     $em->MAGIC($content); 
    } 
} 

답변

0

나는이에 대한 해결책을 발견했다. 그것은 단지 한 번에 하나의 앨범의 구성원이 될 수 있도록 콘텐츠를 정의하여 - I는 다음과 같은 내용으로 앨범을 가입 할 수 있습니다 :

$dql = 'SELECT a,c,cc,cf,ac FROM Content c JOIN c.album a JOIN a.content ac JOIN c.comments cc JOIN c.file cf WHERE c.id = :id' 

그런 다음 교리 2 마법 반환 된 내용은을 참조하고 있는지 확인 $album->contents 속성의 동일한 개체도 마찬가지입니다.

최종 결과는 단일 쿼리입니다.