在ManyToMany Relation Doctrine2中查询

时间:2014-04-07 11:31:54

标签: php symfony doctrine-orm

这让我发疯了。

我有一个正常的Symfony2安全系统,其中包含用户和角色实体,它们之间具有ManyToMany关系。

假设我在数据库中有3个角色,ROLE_1ROLE_2ROLE_3

如何检索所有没有ROLE_3的用户?

我已尝试过类似的内容:

$qb->innerJoin('u.roles', 'r , 'WITH', $qb->expr()->notIn('r.id', ':roles')))
                ->setParameter('roles', array(3));

我的问题是,如何在JoinTable中查询?

1 个答案:

答案 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是用户和角色之间的桥接表。