Symfony 具有联接表和两个联接的DQL查询

Symfony 具有联接表和两个联接的DQL查询,symfony,doctrine,dql,Symfony,Doctrine,Dql,我有两个实体: /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\ManyToMany(targetEntity="Myapp\UserBundle\Entity\Group") * @ORM\JoinTable(name="user_groups", * joinColumns={@ORM\JoinColumn(name="user_id", re

我有两个实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User
{
    /**
     * @ORM\ManyToMany(targetEntity="Myapp\UserBundle\Entity\Group")
     * @ORM\JoinTable(name="user_groups",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
     * )
     */
    protected $groups;

    ...
}

我找不到创建DQL查询的方法,该查询的结果如下:

SELECT g.name, g.id, count( u.id )
FROM users u
LEFT JOIN user_groups ug ON u.id = ug.user_id
RIGHT JOIN groups g ON g.id = ug.group_id
GROUP BY g.id
我尝试过,但失败了:

$this->getEntityManager()
    ->createQuery('
        SELECT g.id, g.name, count(u.id) as usercount FROM MyappUserBundle:User u
        JOIN u.groups g
        GROUP BY g.id'
    );

由于结果不包含没有用户的组。

这是一个多个关系,不要尝试在关系表上加入事件,只有相关实体。。。 那么,你是正确的加入。。。对于SQL查询,但原则会自动从from子句定义连接类型

在DQL中,只有定义的关系由连接管理,所以您不需要USE或ON子句

这个怎么样

SELECT g.name, g.id, count( u.id )
FROM groups g
JOIN users u
GROUP BY g.id

它只返回有用户的组。但我也需要空组,有0个哼唱。。。我通过反转FROM和JOIN表进行了更新,现在应该更好了。。。
SELECT g.name, g.id, count( u.id )
FROM groups g
JOIN users u
GROUP BY g.id