2012-03-27 2 views
1

queryBuilder 대신 createQuery()를 사용하여 쿼리를 작성하는 데 사용되지만 queryBuilder에서 쿼리를 변환하여 EntityType에서 생성해야합니다. 양식. 여기createQuery()에서 queryBuilder()로 쿼리를 변환하는 데 도움이 필요합니다.

SELECT p FROM D2ECoreBundle:Player p, 
D2ECoreBundle:LadderMatch lm, 
D2ECoreBundle:PlayerComposition hpc 
JOIN hpc.players hp, 
D2ECoreBundle:PlayerComposition fpc 
JOIN fpc.players fp 
WHERE (lm.homePlayerComposition = hpc AND hp = p) 
OR (lm.foreignPlayerComposition = fpc AND fp = p) 

하고 내가 그것을 queryBuilder하지만 나던 일을 할 것이라고 생각 무엇인가 : 여기 내 쿼리입니다

$qb->select('p') 
->from('D2ECoreBundle:Player', 'p') 
->from('D2ECoreBundle:LadderMatch', 'lm') 
->from('D2ECoreBundle:PlayerComposition', 'hpc') 
->join('hpc.players', 'hp') 
->from('D2ECoreBundle:PlayerComposition', 'fpc') 
->join('fpc.players', 'fp') 
->where('lm.homePlayerComposition = hpc' AND 'hp = p') 
->orwhere('lm.foreignPlayerComposition = fpc' AND 'fp = p'); 

사람이 내가 작업 한 것으로 변경해야하는지 알고 있나요? 대답은 고맙습니다!

답변

0

결국 나는 이것을 할 수있었습니다. 여기 내 코드입니다 : 나는 플레이어를 선택합니다 이후

$qb = $this->createQueryBuilder('lm') 
    ->select('p') 
    ->from('D2ECoreBundle:Player', 'p') 
    ->join('lm.homePlayerComposition', 'hpc') 
    ->join('hpc.players', 'hp') 
    ->join('lm.foreignPlayerComposition', 'fpc') 
    ->join('fpc.players', 'fp') 
    ->where('lm.homePlayerComposition = hpc AND hp = p') 
    ->orwhere('lm.foreignPlayerComposition = fpc AND fp = p'); 
return $qb; 

그리고 매우 중요한 것은, 그러나 LadderMatch 엔티티에 의해 시작, 내가했던 것처럼 PlayerRepository.php LadderMatchRepository.php에 넣고하지 필요, 그것은 generat에 영향을 미치기 때문에

1

당신과 함께 DB를 조회 할 때 : 많은 구현에

SELECT * FROM TableA T1, TableB T2 .... 

은 동일하다 : 대신 from 여러 번 사용하는 그래서

SELECT * FROM TableA T1 JOIN TableB T2 ON ... // this is INNER JOIN 

, joins 수행

$qb->select('p') 
->from('D2ECoreBundle:Player', 'p') 
->join('p.ladderMatches', 'lm') 
->join('p.playerComposition', 'hpc') 
->join('hpc.players', 'hp') 
->join('hp.playerCompossition', 'fpc') 
->join('fpc.players', 'fp') 
->where('lm.homePlayerComposition = hpc' AND 'hp = p') 
->orwhere('lm.foreignPlayerComposition = fpc' AND 'fp = p'); 

내가 관계를 올바르게했는지는 확실하지 않지만 요점을 얻는다면 ...

+0

플레이어는 LadderMatch를 포함하지 않습니다. 이것이 문제입니다. 그러나 thx 나는 나의 mystakes 중의 1 개를 얻는다. 래더 매치 카운트 2 PlayerComposition (Home et Foreign) 및 PlayerComposition에는 플레이어가 포함되어 있습니다. 하지만 난 선수를 원해! – copndz

관련 문제