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實例,但可能完全是其他的東西。
完美!謝謝@Rene! –