我有群组和用户实体。它们通过GroupUser实体关联 - 这是一个多余的实体,具有状态等额外字段。
Class Group
/**
* @ORM\OneToMany(targetEntity="GroupUser", mappedBy="group")
*/
private $groupUsers;
Class User
/**
* @ORM\OneToMany(targetEntity="GroupUser", mappedBy="user")
*/
private $userGroups;
Class GroupUser
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="User", inversedBy="userGroups", cascade={"persist"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $user;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Group", inversedBy="groupUsers", cascade={"persist"})
* @ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $group;
如何使用QueryBuilder
获取用户与每个组中的用户数相关联的组列表 $qb = $this->createQueryBuilder('group')
->select('group.id', 'group.name', 'COUNT(groupUser.user) as membersCount')
->join('group.groupUsers', 'groupUser')
->where('groupUser.user = :userId')
->andWhere('groupUser.status = :status')
->addGroupBy('groupUser.group')
->setParameter('userId', $user->getId())
->setParameter('status', $status);
$results = $qb->getQuery()->getResult();
即使有多个成员,此查询也会将membersCount返回为1。如何更改查询以获得每个组的正确成员数?