2013-10-11 76 views
1

在Symfony2中,我在用戶和角色之間有很多很多的關係。 我正在嘗試獲取所有未鏈接到ROLE_SUPER_ADMIN角色的用戶的列表。學說查詢「哪裏沒有」子查詢問題

在遷移到Symfony2/Doctrine之前,我用一個簡單的NOT IN sql查詢實現了這一點,但對於我來說,我無法達到與doctrine相同的效果。

這裏就是我想:

$em = $this->getDoctrine()->getManager(); 
$qb = $em->createQueryBuilder(); 
$qb2 = $qb; 

$dql = $qb->select('sa.id') 
      ->from('AcmeAdminBundle:User', 'sa') 
      ->leftJoin('sa.roles', 'r') 
      ->andWhere('r.role = :role') 
      ->getDQL(); 

$result = $qb2->select('u') 
       ->from('AcmeAdminBundle:User', 'u') 
       ->where($qb2->expr()->notIn('u.id', $dql)) 
       ->setParameter('role', 'ROLE_SUPER_ADMIN') 

$users = $result->getQuery()->getResult(); 

但是,這是錯誤:

[Semantical Error] line 0, col 140 near 'sa LEFT JOIN': 
Error: 'sa' is already defined. 

這是輸出:

SELECT u 
FROM AcmeAdminBundle:User sa 
LEFT JOIN sa.roles r, AcmeAdminBundle:User u 
WHERE u.id NOT IN (
        SELECT sa.id 
        FROM AcmeAdminBundle:User sa 
        LEFT JOIN sa.roles r 
        WHERE r.role = :role 
       ) 

不知道爲什麼它輸出因爲它不應該兩次執行LEFT JOIN,我的懷疑是它與哈哈有關查看兩個QueryBuilder實例,但可能完全是其他的東西。

回答