gpt4 book ai didi

symfony - 带连接表和两个连接的 DQL 查询

转载 作者:行者123 更新时间:2023-12-02 12:08:42 25 4
gpt4 key购买 nike

我有 2 个实体:

/**
* @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;

...
}

/**
* @ORM\Entity(repositoryClass="Myapp\UserBundle\Repository\GroupRepository")
* @ORM\Table(name="groups")
*/
class Group
...

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

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 查询,您使用 RIGHT JOIN ... 是正确的,但 Doctrine 自动从 FROM 子句定义连接类型。

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

这个怎么样?

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

关于symfony - 带连接表和两个连接的 DQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8534991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com