我有一个关系:用户 - > [OneToMany] - >个人资料< - [OneToMany]< - Group
当用户加入群组时,会使用夫妻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)
感谢您的帮助。
答案 0 :(得分: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()
));