首先,我已经使用了与第三个实体的两个一对多关系和额外的参数
但是完整的架构有点复杂,我需要进行大量的连接来获取我的所有实体
现在查询:
$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:我不能发布架构图片,因为我没有声誉......
答案 0 :(得分:0)
在不知道架构的情况下给出适当答案有点困难,但原则上您可以直接加入引用的user
而不使用location
:
$qb->select('action, location, user')
->from('GestionLocationBundle:action', 'action')
->leftJoin('action.location', 'location' )
->leftJoin('action.users', 'user')
->andWhere($qb->expr()->in('action.refLocation', $Location));