Php 如何使用Symfony按其他实体对实体进行分组
我正在使用条令进行Symfony项目 所以我有3个实体:Php 如何使用Symfony按其他实体对实体进行分组,php,symfony,doctrine-orm,entity,dql,Php,Symfony,Doctrine Orm,Entity,Dql,我正在使用条令进行Symfony项目 所以我有3个实体: 计划 活动 类别 一个项目有几个活动,一个活动也有几个类别 我正在尝试获取所有活动,按项目类别分组 正确的做法是什么 我尝试使用QueryBuilder,但似乎无法使用其他实体进行分组,只能使用值(如果我错了,请告诉我) 编辑 我真正需要的是显示一个类别列表,其中包含相应的活动 -Category1 -Activity1 -Activity2 -Activity3 -Category2 -Act
- 计划
- 活动
- 类别
-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();
然后,在模板中(您使用的是细枝吗?)
在SQL\DQL中,
groupBy
用于进行计数、平均值、总和等计算。。您真正需要做的是什么?我需要显示一个类别列表,其中包含相应的活动。然后,您应该获取并迭代类别,而不是我使用的twig;)谢谢你的回答,我很高兴看到有一个更简单的方法:D“if action.project.id=1”是用来做什么的?它只过滤你想要的动作。这不是干净的代码,我不完全知道你想过滤掉谁。请随意写下,若条件以另一种方式确定并没有问题,实际上,“where('p.id=?1')”操作已经被过滤,所以无需再次过滤。我在我的项目中检查了您的代码(通过重构),它工作得很好!谢谢!
$q = $categoryRepo->createQueryBuilder('c')
->leftJoin('c.actions', 'a')
->leftJoin('a.project', 'p')
->where('p.id = ?1')
->setParameter(1, $projectId)
->getQuery();
return $q->getResult();
{% for category in categories %}
- {{ category }}
{% for action in category.actions if action.project.id = 1 %}
- {{ action }}
{% endfor %}
{% endfor %}