当中间表未映射实体时加入DQL


Join DQL when intermediate table has not entity mapped

我正在构建一个存储库方法,在允许删除组之前,查看是否将fos_group分配给了任何fos_user。基本上,这是我试图使用DQL:进行的原始查询

SELECT
    COUNT(*)
FROM
    fos_user u
LEFT JOIN fos_user_user_group fug ON (fug.user_id = u.id)
WHERE
    fug.group_id = :group_id

这就是我如何设置UsersGroups:之间的关系

/**
 * @ORM'ManyToMany(targetEntity="Group")
 * @ORM'JoinTable(name="fos_user_user_group",
 *      joinColumns={@ORM'JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM'JoinColumn(name="group_id", referencedColumnName="id")}
 * )
 */
protected $groups;

这就是我迄今为止所做的:

$qb = $this->getEntityManager()->createQueryBuilder();
$qb
        ->select('COUNT(gr.id)')
        ->from("UserBundle:Group", "gr");
return $qb->getQuery()->getSingleScalarResult();

但我被卡住了,因为我不知道如何添加带有未映射表/实体(fos_user_user_group)的join句子,有人能给我推一下吗?

您已经将您的属性映射到了那里,您正在以正确的方式加入用户实体中的属性$groups,它将加入您的连接表fos_user_user_group,并使用Whatever-You-where子句

 $qb
    ->select('COUNT(g.id)')
    ->from('UserBundle:User', 'u')
    ->join('u.groups g')
    ->where('g.id = :val')
    ->setParameter('val',$your_group_id);