Php 如何使用doctrine QueryBuilder通过附加参数和附加条件连接多对多表

Php 如何使用doctrine QueryBuilder通过附加参数和附加条件连接多对多表,php,database,symfony,doctrine,Php,Database,Symfony,Doctrine,首先,我已经使用了带有额外参数的第三个实体的两个一对多关系 但是完整的模式有点复杂,我需要进行大量的连接才能获得所有的实体 现在是查询: $qb = $this->_em->createQueryBuilder(); $qb->select('action'); $qb->addSelect('location'); $qb->addSelect('locationuser'); $qb->addSelect('use

首先,我已经使用了带有额外参数的第三个实体的两个一对多关系

但是完整的模式有点复杂,我需要进行大量的连接才能获得所有的实体

现在是查询:

    $qb = $this->_em->createQueryBuilder();

    $qb->select('action');
    $qb->addSelect('location');
    $qb->addSelect('locationuser');
    $qb->addSelect('user');

    $qb->from('GestionLocationBundle:action',   'action');
    $qb->leftJoin('action.location',   'location' );
    $qb->leftJoin('location.users',   'locationuser'  );
    $qb->leftJoin('locationuser.user',   'user', 'WITH','user.idUser = action.refUser' );

    $qb->andWhere($qb->expr()->in('action.refLocation',$Location));

    $resultats = $qb->getQuery()->getResult();
结果是我得到了所选操作引用的所有用户的列表,如下所示。结果以JSON序列化:

0:{
    id_action: 79
    ref_user: 4875
    location:{
        users:{
            0:{user:{id_user:2, name:USER1}}
            1:{user:{id_user:4875, name:JAMES}}
            },
        id_location:10,
        name:LOC1
    }
}
1:{
    id_action: 78
    ref_user: 2
    location:{
        users:{
            0:{user:{id_user:2, name:USER1}}
            1:{user:{id_user:4875, name:JAMES}}
            },
        id_location:10,
        name:LOC1
    }
}
但是对于每个操作,我只希望特定操作引用用户。 我如何使用doctrine queryBuilder实现这一点


PS:我不能发布模式图片,因为我没有足够的声誉…

在不知道模式的情况下给出适当的答案有点困难,但原则上你可以直接加入引用用户,而不使用位置:


可能我的关系模式不好,因为实体操作与实体用户没有直接关系。仅包含受影响用户对此特定操作的引用的和整数。我应该换一下吗?问题是我必须将symfony和条令应用于现有数据库,所以在第一次尝试时,我试图保持它的简单…@NoPr0n我将添加此关系。它似乎是您的业务逻辑所需要的,并且通常不会使模式更加复杂。
$qb->select('action, location, user')
   ->from('GestionLocationBundle:action', 'action')
   ->leftJoin('action.location', 'location' )
   ->leftJoin('action.users', 'user')
   ->andWhere($qb->expr()->in('action.refLocation', $Location));