有2个表1:用户2:角色用户分别存储在第一组、第二组用户中。这些表通过“多对多”关系链接。
例如,我需要选择不在“ROLE_SUPER_ADMIN”组中的用户。
我提出这样的要求:
$qb = $this->createQueryBuilder('u');
$qb->select('u.id, u.username, u.email', 'u.is_active');
$qb->where(':role NOT MEMBER OF u.user_roles');
$qb->setParameter(':role', 1);
$query = $qb->getQuery();
$result = $query->getArrayResult();
return $result;
这里的关键短语是: where(':role NOT MEMBER OF u.user_roles'); 其中角色是一个实体或同一组“ROLE_SUPER_ADMIN”的标识。因此,我需要再发出一个请求以通过名称获取该实体或找出它的 ID:
$qb = $this->createQueryBuilder('r')
->select('r')
->where('r.name IN (:names)')
->setParameter(':names', $rolesNames)
;
$query = $qb->getQuery();
$result = $query->getResult();
问题:如何在第一个查询中将其作为子查询来完成?这可以使用相同的查询生成器来完成吗?
获取您的子请求
在主查询中对其应用过滤器: