Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 教义2多对多_Symfony_Doctrine Orm - Fatal编程技术网

Symfony 教义2多对多

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

我希望获得一个属于多个组的用户。因此,我有变量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 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