2016-07-19 2 views
0

왼쪽 조인을 사용할 때 ManytoOne 관계를 검색하는 데 문제가 있습니다. 쿼리 작성기에서 왼쪽 조인 사용 doctrine

는 전에 지금은 많은 관계로 많은의 확산에 묶여 확산과 참여 왼쪽하기 위해 노력하고있어 회의
$qb = $this->createQueryBuilder('u') 
->select('u.id,u.comment, 
IDENTITY(u.place) AS place_id, 
IDENTITY(u.sponsor) AS sponsor_id, 
IDENTITY(u.tour) AS tour_id, 
u.startat 
'); 

쿼리이 쿼리를 사용했다.

$qbt = $this->createQueryBuilder('u') 
     ->select('u','c') 
     ->from('AppBundle:Conference', 'p') 
     ->leftJoin('p.diffusion', 'c'); 

그러나이 쿼리는 ManyToOne 관계 인 u.place, u.sponsor 및 u.tour를 반환하지 않습니다.

+1

내 마지막 쿼리는 무엇을 반환하지

입니까? – Splendonia

+0

모든 릴레이션 설정이 있다고 가정하면 언급 한 엔티티가 게으르게로드됩니다. 물론 당신은 u를 실제로 선택하지 않으므로 쿼리는 상관없이 작동하지 않습니다. – Cerad

+0

Personnaly, 조인을 처리해야 할 때 QueryBuilder (또는 심지어 DQL)가 "싫다". 나는 NativeQuery 클래스를 사용한다. http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/native-sql.html @Cerad가 여기에 개입하여이 문제에 관한 그의 생각을 공유하기를 바랍니다. –

답변

1

leftJoin 뒤에 'WITH'가 와야합니다. 예를 들면 다음과 같습니다.

->leftJoin('p.diffusion', 'p', 'WITH', 'p.user=u.id', 'u.id'); 

하지만 둘 다 엔티티를 게시하면 정확한 답을 줄 수 있습니다.

+2

음. DQL은 SQL보다 약간 똑똑하며 매핑 데이터에서 WITH 절을 유추합니다. – Cerad

0

문제 발견 , 내가 추가했다 - 기본적으로 getArrayResults가 (장소를 외부 키를 반환하지 않기 때문에 후원의 getQuery에> setHint (\ 교리 \ ORM \ 검색어 : HINT_INCLUDE_META_COLUMNS, TRUE) 및 투어 존경). 다음은 회의 저장소

 $qbt = $this->_em->createQueryBuilder(); 
     $qbt->select('conference','diffusion') 
     ->from('AppBundle:Conference', 'conference') 
     ->leftJoin('conference.diffusion', 'diffusion'); 

    return $qbt 
     ->getQuery() 
     ->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true) 
     ->useQueryCache(true) 
     ->useResultCache(true,3600) 
     ->getArrayResult(); 
관련 문제