0

我有一个关系:用户 -> [OneToMany] -> 个人资料 <- [OneToMany] <- 组

当用户加入一个组时,会使用一对 user_id/group_id 创建一个配置文件。

我想从用户那里获得未加入的组。

这个 SQL 请求很好用,但我想用 QueryBuilder 翻译它:

对于 id 为 2 的用户,

SELECT g.id 
FROM Group g 
WHERE id NOT IN (SELECT group_id FROM Profile WHERE user_id = 2)

谢谢你的帮助。

4

1 回答 1

0

我没有测试它,但我认为这应该工作

    $qb = $this->conn->createQueryBuilder();
    $qb->select('g.id');
    $qb->from('Group', 'g');
    $qb->innerJoin('g', 'Profile', 'p', 'g.id != p.group_id');
    $qb->where('p.group_id = 2);

**编辑对不起,我没有阅读未加入的部分。

尝试这个

$qb = $this->conn->createQueryBuilder();
$qb->select('g.id');
$qb->from('Group', 'g');
$qb->where($qb->expr()->notin(
       'g.id',
       $qb2->select('p.group_id')
           ->from('Profile', 'p')

           ->getDQL()
));
于 2013-02-22T11:40:31.723 回答