2012-04-18 2 views
5

Doctrine 2에 문제가 있고 maytomany 관계에서 왼쪽 결합이 작동하려고합니다. 그것은 아마도 내 쿼리 빌더지만, 나는 그것을 알아낼 수 없습니다. 사용자가 관계의 소유자 인 두 가지 모델, 사용자 및 관광 명소, 들어Doctrine 2 leftJoin, manytomany 관계, 잘못된 행 수 반환

---------------------------------- 
| user_id | attraction_id | 
---------------------------------- 
| 4    1    | 
| 4    2    | 
| 4    3    | 
---------------------------------- 

:

나는 조인 테이블과 같이 있습니다.

내가이 쿼리를 수행 할 때 :

$attractions = $CI->em->createQueryBuilder() 
     ->select('a', 'u') 
     ->from('\ListLovers\Model\Attraction', 'a') 
     ->leftJoin('a.users', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'u.id = 4') 
->getQuery()->getResult(); 

내 사용자가 하나의 ID와 매력에 대한 계산은 1 대입니다!

지금 내가 그렇게 같은 조인 테이블에 다른 행을 추가하는 경우 :

---------------------------------- 
| user_id | attraction_id | 
---------------------------------- 
| 1    1    | 
| 4    1    | 
| 4    2    | 
| 4    3    | 
---------------------------------- 

을 ... 같은 쿼리를 수행, 내 사용자는 하나의 ID입니다 ... ZERO와 매력에 대한 계산합니다. 뭐야?

나는 뭔가를 놓친가요?

감사합니다. 마크.

+1

다른 테이블 (사용자 지정 식별자 사용)에 대한 필드를 사용해야하며 필터는 SQL 쿼리의 "where"섹션에 있어야합니다. – ZhukV

답변

0

당신은이 방법을 시도하는 경우 : 다 대다가 MEMBER OF 또는 NOT MEMBER OF 때문이다

 $attractions = $CI->em->createQueryBuilder('a') 
         ->leftJoin('a.users', 'u') 
         ->addSelect('u') 
         ->where('u.id = :uid') 
         ->setParameter('uid', 4) 
        ->getQuery() 
        ->getResult(); 
2

가장 좋은 방법.

$attractions = $CI->em->createQueryBuilder() 
     ->select('a', 'u') 
     ->from('\ListLovers\Model\Attraction', 'a') 
     ->where(':uid MEMBER OF a.users') 
     ->setParameter('uid', 4) 
     ->getQuery()->getResult();