2017-03-02 14 views
0

QueryBuilder#select(...)에 제공되지 않는 엔티티를 선택하고 싶습니다. Doctrine의 QueryQuider를 사용하여 다른 엔티티 유형을 통해 엔티티를 선택하는 방법은 무엇입니까?

SELECT x.* 
FROM aaa a 
INNER JOIN bbb b ON a.document_id = b.id 
INNER JOIN ccc c ON b.client_user_id = c.id 
INNER JOIN xxx x ON c.client_id = x.id 
WHERE a.id = 123 

지금 나는 QueryBuilder이 논리를 구현하기 위해 노력 : 원시 SQL에서 그것과 같을 것이다

$query = $queryBuilder->select('x') 
    ->from(Aaa::class, 'a') 
    ->join('a.bbb', 'b') 
    ->join('b.ccc', 'c') 
    ->join('c.xxx', 'x') 
    ->where('a.id = :aId') 
    ->setParameter('aId', $aId) 
    ->getQuery() 
; 

을하지만 그것은 작동하지 않습니다

[Semantical Error] line 0, col -1 near 'SELECT x FROM': Error: Cannot select entity through identification variables without choosing at least one root entity alias.

방법 Doctrine의 QueryQuilder를 사용하여이 작업을 수행 할 수 있습니까?

답변

0

불행히도 Doctrine에서는 불가능합니다 (GitHub에서 Benjamin Eberlei의 진술 참조).

용액 해결AaaXxx에서 방향 전체 연결 체인을 정의하고 시작 "경로"다음 Xxx 엔티티 FROMXxx 찾는 것이다/:

$query = $queryBuilder->select('x') 
    ->from(Xxx::class, 'x') 
    ->join('x.ccc', 'c') 
    ->join('c.bbb', 'b') 
    ->join('b.aaa', 'a') 
    ->where('a.id = :aId') 
    ->setParameter('aId', $aId) 
    ->getQuery() 
;