2012-04-18 81 views
5

我有一個關於Doctrine 2的問題,以及一個關於maytomany關係的左連接,我試圖讓它工作。這可能是我的查詢生成器,但我似乎無法弄清楚。Doctrine 2 leftJoin,with,manytomany relationship,wrong rows of rows returned

我有一個連接表所示:

---------------------------------- 
| 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的吸引力是1大!

現在,如果我添加其他行的連接表所示:

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

...,並執行相同的查詢,我的用戶數爲吸引ID爲1是......零。什麼?

我錯過了什麼嗎?

謝謝, 馬克。

+1

您必須使用字段來連接到另一個表(您的使用自定義標識符),並且篩選器必須位於SQL查詢中的「where」部分。 – ZhukV 2014-02-12 05:14:37

回答

0

如果你試着這樣說:對於許多一對多是MEMBER OFNOT 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();