2010-08-04 2 views
2

세 개의 테이블 A, B, C가 있습니다. A와 B는 일대 다 관계가 있습니다. B와 C는 일대 다 관계가 있습니다. 즉, 각 A는 여러 개의 Bs를 가질 수있는 반면, 각 B는 여러 개의 C를 가질 수 있습니다.연결 된 일대 다 관계에 대한 doctrine 쿼리

이제 관련 C가있는 모든 관련 B를 얻으려면 A의 주어진 레코드에 대한 쿼리를 수행하고 싶습니다. 다른 말로하면 테이블 A의 레코드 인 주어진 a에 대해 테이블 ​​B의 모든 관련 Bs를 얻으려고합니다. 각 Bs는 테이블 C의 관련 C가 0보다 많아야합니다.

PHP doctrine에서 문장을 작성하는 방법은 무엇입니까? 내가 작동하지 않는 코드가있다 :

Doctrine_Query :: create() -> ('B b') -> from leftJoin ('C c') -> andWhere ('b.A_id =?' , a.id) -> andWhere ('c.b_id = b.id');

답변

0

왜 안쪽 조인을 사용하지 않으시겠습니까? 푸, 바, 바즈 (각각 A, B 및 C)와

:

Doctrine_Query::create() 
->from('Bar bar') 
->where('bar.foo_id = ?', $foo->id) 
->innerJoin('bar.Baz baz'); 

만 푸에 속하고 하나 또는 여러 바즈이 줄을 얻을 것이다 이쪽으로.

+0

작동합니다! 나는 그것을 시도했다. – peter

0

Doctrine에 관한 저의 연구에서 이것은 불가능합니다 (Doctrine 1은 제가 말하고있는 것입니다).

내가 아는이 해결 방법은 여러 쿼리를 수행하는 것입니다. IE는 B id를 모두 가져 와서 whereIN 절에서 사용하고 별도의 쿼리에서 가져옵니다. 다른 사람이 더 좋은 방법이 있다면 나는 그것에 관심이있을 것이다.

0

premiso는 적어도 2 개의 쿼리를 작성해야한다고 언급했다. 나는 또한 그가 제안한 방식대로 (B id를 모두 사용하고 IN을 사용한다) 할 것이다.

더 많은 교리 - 라인을 만들려면 DQL Subqueries을보십시오. 그들은 이미 ID의 선택과 관련하여 IN을 사용하는 예를 보여줍니다.

편집 : DuoSRX의 답변을 읽고, 내 동창과 함께 표시 한 내용을 의미 할 수도 있지만 질문을 올바르게 이해했는지는 확실하지 않을 수 있습니다.

관련 문제