Symfony 教义2多对多
我希望获得一个属于多个组的用户。因此,我有变量groupsId,但当我有“member of”时,我不知道如何添加“where in”Symfony 教义2多对多,symfony,doctrine-orm,Symfony,Doctrine Orm,我希望获得一个属于多个组的用户。因此,我有变量groupsId,但当我有“member of”时,我不知道如何添加“where in” 试试这个,还没有测试 SELECT u.id FROM user u JOIN u.groups g WITH g.id IN :groupsId WHERE u.id = :userId AND SIZE(u.groups) > 1 大小(u.groups)>1检查多个组中的用户成员身份。尝试此方法,尚未测试 SELECT u.id FROM user
试试这个,还没有测试
SELECT u.id FROM user u JOIN u.groups g WITH g.id IN :groupsId WHERE u.id = :userId AND SIZE(u.groups) > 1
大小(u.groups)>1检查多个组中的用户成员身份。尝试此方法,尚未测试
SELECT u.id FROM user u JOIN u.groups g WITH g.id IN :groupsId WHERE u.id = :userId AND SIZE(u.groups) > 1
SIZE(u.groups)>1检查多个组中的用户成员身份。您可以改用,这有助于您更快、更轻松地构建查询
您可以执行以下操作:
$expr = $em->getExpressionBuilder();
$query = $em->getRepository('App\Entity\User')
->createQueryBuilder('u')
->select('u.id', 'count(g.id) as HIDDEN cnt')
->innerJoin('u.groups', 'g', 'WITH', $expr->in('g.id', ':groupsIds'))
->where('u.id = :userId')
->having('cnt > 1')
->setParameters(array(
'userId' => 1,
'groupsIds' => array(1, 2, 3),
))
->groupBy('u.id')
->getQuery();
var_dump($query->getResult());
die;
编辑:我已经改进了查询,因为我刚刚注意到您希望拥有多个组。您可以改用它,它可以帮助您更快、更轻松地构建查询
您可以执行以下操作:
$expr = $em->getExpressionBuilder();
$query = $em->getRepository('App\Entity\User')
->createQueryBuilder('u')
->select('u.id', 'count(g.id) as HIDDEN cnt')
->innerJoin('u.groups', 'g', 'WITH', $expr->in('g.id', ':groupsIds'))
->where('u.id = :userId')
->having('cnt > 1')
->setParameters(array(
'userId' => 1,
'groupsIds' => array(1, 2, 3),
))
->groupBy('u.id')
->getQuery();
var_dump($query->getResult());
die;
编辑:我改进了查询,因为我刚刚注意到您希望有多个组。但是我在每个实体中都有注释,所以我不需要使用“连接”。因此,我使用“成员”。我的实体看起来像下一个示例:通过“多对多,双向”查找,其中的成员可以检查组集合中一个组的条目。但是您需要一个在中定义的组:groupsId by id,对吗?是的,我想知道一个特定用户有多少个组。例如,id为1的用户有1、2和3个groupIDB,但我在每个实体中都有注释,所以我不需要使用“JOIN”。因此,我使用“成员”。我的实体看起来像下一个示例:通过“多对多,双向”查找,其中的成员可以检查组集合中一个组的条目。但是您需要一个在中定义的组:groupsId by id,对吗?是的,我想知道一个特定用户有多少个组。例如,id为1的用户有1、2和3个groupId