如何使用 Symfony 按其他实体对实体进行分组

How to group Entity by other Entity with Symfony

我正在使用 Doctrine 开发 Symfony 项目

所以我有 3 个实体:

一个项目有多个活动,一个activity也有多个类别

我正在尝试获取按项目类别分组的所有活动。

这样做的正确方法是什么?

我试过使用 QueryBuilder,但似乎不能与其他实体分组,只能通过值分组(如果我错了请告诉我)

$q = $repo->createQueryBuilder('a')
        ->leftJoin('a.project', 'p')
        ->leftJoin('a.categories', 'category')
        ->where('p.id = ?1')
        ->setParameter(1, $projectId)
        ->groupBy('category.id')
        ->getQuery();
    return $q->getResult();

编辑 我真正需要的是在

中显示包含相应活动的类别列表
-Category1
     -Activity1
     -Activity2
     -Activity3
-Category2
     -Activity3
     -Activity4
-Category4
     -Activity1
     -Activity2
     -Activity3
     -Activity4
     -Activity5

我这样做的方法好而我的代码错了吗?还是我哪里都错了?

非常感谢您的宝贵时间!

您应该获取和遍历类别,而不是操作:

$q = $categoryRepo->createQueryBuilder('c')
    ->leftJoin('c.actions', 'a')
    ->leftJoin('a.project', 'p')
    ->where('p.id = ?1')
    ->setParameter(1, $projectId)
    ->getQuery();
return $q->getResult();

然后,在您的模板中(您使用的是 Twig 吗?)

{% for category in categories %}
 - {{ category }}
    {% for action in category.actions if action.project.id = 1 %}
     - {{ action }}
    {% endfor %}
{% endfor %}