【问题标题】:How to group Entity by other Entity with Symfony如何使用 Symfony 按其他实体对实体进行分组
【发布时间】:2015-06-30 06:24:13
【问题描述】:

我正在使用 Doctrine 进行 Symfony 项目

所以我有 3 个实体:

  • 项目
  • 活动
  • 类别

一个项目有几个活动,一个活动也有几个类别

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

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

我尝试使用 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

我做这件事的方法好,我的代码错了吗?还是我到处都错了?

非常感谢您的宝贵时间!

【问题讨论】:

  • 在 SQL\DQL 中,groupBy 用于进行计数、平均值、总和等计算。您真正需要做什么?
  • 我需要显示一个包含相应活动的类别列表。
  • 然后,您应该获取和迭代类别,而不是操作

标签: php symfony doctrine-orm entity dql


【解决方案1】:

您应该获取和迭代类别,而不是操作:

$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 %}

【讨论】:

  • 是的,我正在使用 twig ;) 感谢您的回答,我很高兴看到有一种更简单的方法:D “if action.project.id = 1”是什么意思?
  • 只过滤你想要的动作。这不是干净的代码,我完全不知道你想过滤掉谁。随意以其他方式编写 if 条件
  • 好的没问题,实际上,使用“where('p.id = ?1')”的动作已经被过滤了,所以不需要再次过滤我在我的项目中检查了你的代码(重构),效果很好!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多