2011-12-16 2 views
0

나는 Symfony 1.4에서 Doctrine 1.2를 사용하여 쿼리를 작성하고 있습니다. DQL의 원칙을 이해했으며 여러 가지 쿼리가 제대로 작동합니다. 그러나 일부 요구에 대해서는 DQL에서 해결책을 찾지 못하고 대신 SQL을 사용하고 있습니다.Doctrine 1.2 : DQL에서 userprofile을 city와 city에 연결하십시오.

다음은 간단한 예입니다. schema.yml에 sfguarduserprofile 클래스와 도시 클래스와의 관계 (프로필에서 city_id 사용)가 있다고 가정 해 봅시다. 그리고 city 클래스와 country 클래스 사이에 관계가 있습니다 (city 클래스의 country_id 사용).

저는 DQL 쿼리를 작성하여 도시 이름과 국가 이름으로 사용자 프로필을 가져 오려고합니다. 꽤 간단하게 보인다?

그래,하지만 sfguarduserprofile과 country 클래스 사이에 직접 별칭이나 관계가 없기 때문에 DQL에서 "깨끗한"솔루션을 찾지 못했습니다.

내 sfguarduserprofile과 국가 클래스 사이에 직접적인 관계를 만들 수 있지만 더 이상 모범 사례 (MERISE)를 존중하지 않습니다.

내 City 클래스에서 select를 사용하여 userprofile과 country (City는이 두 테이블과 관계가 있음)를 얻을 수 있지만 내 sfguarduserprofile에서 수행 할 다른 조인이 있으므로이 솔루션을 사용할 수 없습니다.

SQL에서는 매우 간단하지만 doctrine 개체를 사용하고 싶습니다.

"깨끗한"솔루션을 사용하고 있다면 기꺼이 알게 될 것입니다.

내가 간단했지만 내 schema.yml 파일이 교리에 최적화되지 않았기 때문에이 과거에 작동하지 않았다, 해결책을 발견하면

Sandrino

답변

0

감사합니다. 다음은 작동하는 검색어의 예입니다.

$q = Doctrine_Query::create() 
     ->select('p.user_id, u.username, c.name, co.name') 
     ->from('sfGuardUserProfile p') 
     ->leftJoin('p.User u') 
     ->leftJoin('p.City c') 
     ->leftJoin('c.Country co') 
     ->orderBy('p.user_id');