这让我发疯了。
我有一个正常的Symfony2安全系统,其中包含用户和角色实体,它们之间具有ManyToMany关系。
假设我在数据库中有3个角色,ROLE_1
,ROLE_2
和ROLE_3
。
如何检索所有没有ROLE_3
的用户?
我已尝试过类似的内容:
$qb->innerJoin('u.roles', 'r , 'WITH', $qb->expr()->notIn('r.id', ':roles')))
->setParameter('roles', array(3));
我的问题是,如何在JoinTable中查询?
答案 0 :(得分:0)
这是一个SQL问题,而不是Symfony或Doctrine问题。想到的第一个解决方案是子查询,尽管这可能是也可能不是处理此问题的最有效方法。像这样:
SELECT username
FROM users
WHERE users.id NOT IN (
SELECT users.id
FROM users
INNER JOIN user_roles
ON users.id = user_roles.user_id
INNER JOIN roles
ON user_roles.role_id = roles.id
WHERE roles.id NOT IN (1,2)
);
其中1和2是您要在结果中包含的角色的ID,user_roles
是用户和角色之间的桥接表。