2012-04-16 3 views
0

은 내가 제 모델과 사진의 모델이 있고, 나는 현재이 같은 쿼리가이 가입 사용하고 있습니다 : 함께 바인딩에 대한Doctrine 1.2에서 many-to-many 관계로 glue 객체 속성에 어떻게 접근합니까?

$q = Doctrine_Query::create() 
     ->from('Article a') 
     ->leftJoin('a.Photo p'); 

, 나는 ArticlePhoto 모델을 가지고있다. article_idphoto_id 필드 외에도 모델에는 priority INT 필드가 있으며 위의 쿼리에서 사진을 정렬하려고합니다.

나는이 같은 쿼리를 통해 가입 할 필요없이, 이것을 달성 할 수있는 방법 어떤 제안 :

$article['Photo'][0]에있는 문서에 대한 첫 번째 사진을 찾을 것으로 예상 코드의 많은, 그래서 내가 원하는
$q = Doctrine_Query::create() 
     ->from('Article a') 
     ->leftJoin('a.ArticlePhoto ap') 
     ->leftJoin('ap.Photo p') 
     ->orderBy('ap.priority'); 

이것을 바꾸지 않아도됩니다. 어떤 제안을 주셔서 감사합니다!

답변

1

조인에 어떤 문제가 있습니까? 항상 다음과 같이 검색어를 다시 작성할 수 있습니다.

$q = Doctrine_Query::create() 
    ->from('Article a') 
    ->leftJoin('a.ArticlePhoto ap, ap.Photo p') 
    ->orderBy('ap.priority'); 

어떤 마법도없이 완벽하게 훌륭한 검색어처럼 보입니다. ArticlePhoto 테이블 (정렬 용)의 정보가 필요하므로 명시 적 조인을 수행하는 것이 올바른 일입니다.

+0

감사합니다. 지연된 응답에 대해 유감스럽게 생각합니다. – Nils

0
$q = Doctrine_Query::create() 
    ->from('Photo p') 
    ->orderBy('priority'); 

위의 트릭을 수행 할 것입니다. 관계가있는 테이블을 조인 할 필요가 없다는 것을 알아 두십시오 (예를 들어, 테이블이 스키마에서 1 : m 관계를 갖고 있다고 가정). 당신은 기사 객체를 아래에 명시된대로 대답 할 수 있습니다.

$photoObjectCollection=$q->execute(); 
foreach($photoObjectCollection as $photoObject){ 
    $photoObject->Article->requiredField; 
} 
+0

'priority'는'Photo'가 아닌'ArticlePhoto'의 필드입니다. 당신의 질문이 속임수라고 생각하지 않습니다. – j0k

+0

그리고 단순히 $ photoObject-> Article-> requiredField를 사용하면 Article 필드에 액세스 할 때마다 다른 DB 쿼리를 사용하는 것 같습니다. 같은 쿼리를 사용하여 필요한 모든 데이터를 요청하고 싶습니다. – Nils