繁体   English   中英

如何使用教义QueryBuilder将具有额外参数和额外条件的多对多表联接在一起

[英]How to join Many-To-Many table with extra parameter and extra condition with doctrine QueryBuilder

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

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

现在查询:

    $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
    }
}

但是对于每个动作,我只希望特定动作引用用户。 我该如何使用教义的queryBuilder做到这一点?

PS:我无法发布架构图片,因为我没有足够的声誉...

在不了解模式的情况下给出适当的答案有点困难,但是原则上您可以不使用location直接加入引用的user

$qb->select('action, location, user')
   ->from('GestionLocationBundle:action', 'action')
   ->leftJoin('action.location', 'location' )
   ->leftJoin('action.users', 'user')
   ->andWhere($qb->expr()->in('action.refLocation', $Location));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM