Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多对多关系上的多个联接条件_Php_Mysql_Symfony_Doctrine Orm - Fatal编程技术网

Php 多对多关系上的多个联接条件

Php 多对多关系上的多个联接条件,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我正在编写一个应用程序,它有三个类:用户、帖子和组 用户可以发表帖子,但可以代表他们自己和/或他们的一个组发表帖子。两个或两个以上的用户也可以在没有群组的情况下,彼此联合发表一篇文章。我试图找到一种方法来计算用户与之关联的帖子数量,无论是通过他们自己还是通过他们的一个组,如果两个关联都只存在于一个帖子中,那么应该只计算为一个 用户: 以及其他两个实体上的等效mappedBy 我编写了一个MySQL查询,似乎可以解决这个问题 SELECT COUNT(DISTINCT posts.id), use

我正在编写一个应用程序,它有三个类:用户、帖子和组

用户可以发表帖子,但可以代表他们自己和/或他们的一个组发表帖子。两个或两个以上的用户也可以在没有群组的情况下,彼此联合发表一篇文章。我试图找到一种方法来计算用户与之关联的帖子数量,无论是通过他们自己还是通过他们的一个组,如果两个关联都只存在于一个帖子中,那么应该只计算为一个

用户:

以及其他两个实体上的等效mappedBy

我编写了一个MySQL查询,似乎可以解决这个问题

SELECT COUNT(DISTINCT posts.id), users.name FROM users
LEFT JOIN post_user ON post_user.user_id = user.id
LEFT JOIN group_user ON group_user.user_id = user.id
LEFT JOIN post_group ON post_group.group_id = group_user.group_id
LEFT JOIN posts ON
    posts.id = post_user.post_id OR
    posts.id = post_group.post_id
GROUP BY users.id
这给了我一个用户列表,以及他们与之相关的帖子数量

我很难找到将这种查询写入ORM语言的方法。问题来自于必须连接到多个连接表,而不是实体的表本身。在过去,我能够使用“WITH”语句编写条件连接

$qb = $this->createQueryBuilder('u')
    ->select('COUNT(DISTINCT p.id), u.name')
    ->leftJoin('u.groups', 'g')
    ->leftJoin('MyBundle:Post', 'p', 'WITH', 'p = u.posts OR p = g.posts')
这是一个错误

Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
很明显,问题源于“u.posts”和“g.posts”引用表而不是字段

我不确定Doctrine是否能够执行这种查询,我更希望在数据库端执行,因为可能需要处理一个大型数据集,这需要按照结果集的计数排序


是否有任何方法可以使用DQL引用联接表本身?如果没有,是否有一种不同的关系架构可以解决这个问题?

在我看来,您主要关心的应该是数据库中存在多对多关系,而不是代码不能正常工作


创建包含两个查询的并集的视图。在一个查询中从组收集用户id,然后在另一个查询中从独立用户收集用户id。一旦你有了这个视图,你就可以计算了

你能举个例子吗?我不知道如何在DQL或条令查询生成器中实现联合。
Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.