如何使用 Symfony 按其他实体对实体进行分组
How to group Entity by other Entity with Symfony
我正在使用 Doctrine 开发 Symfony 项目
所以我有 3 个实体:
- 项目
- Activity
- 类别
一个项目有多个活动,一个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 %}
我正在使用 Doctrine 开发 Symfony 项目
所以我有 3 个实体:
- 项目
- Activity
- 类别
一个项目有多个活动,一个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 %}