Doctrine查询构建器选择count onetomany实体

时间:2017-05-11 14:32:58

标签: mysql symfony doctrine-orm doctrine query-builder

我有群组和用户实体。它们通过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。如何更改查询以获得每个组的正确成员数?

0 个答案:

没有答案