php - Doctrine2 存储库、多对多关联和 Twig 模板 : best practices

标签 php symfony many-to-many doctrine-orm twig

我有以下问题:

假设我们有一个实体,例如事件

EventRepository 类中,我添加了一些方法来查询某种事件。

EventController 中,我有一个事件集合。最后一步 - 在模板中显示所有这些事件。基本上没什么难的:

{% for event in events %}...{% endfor %}

但我还有一个附加条件:我需要显示参加每个事件的用户(例如,每个事件有 10 个用户)。事件链接到具有多对多关联的用户。好的,我已将方法添加到 EventRepository 以查找事件参与者。但是我无法访问 Twig 模板中的 EventRepository ... :(

我看到三个选项:

  1. (快速而巧妙)通过实体直接获取参与者:{% for event in events %}{% set participants = event.participants %}{% endfor %}。这行得通,但是我们什么时候让参与者计数 1000+? Afaik event->getParticipants() 将立即查询所有 1000 多个用户,这会破坏我的页面。
  2. 将 EventRepository 实例传递给模板并为每个事件查询 10 个用户,如下所示:{% for event in events %}{% set participants = eventRepository.getEventParticipants(event.id, max) %}{%结束于 %}。这看起来更正确,但似乎打破了核心 MVC 概念——在模板中查询数据库。
  3. 在 Controller 中循环事件并为每个事件准备参与者列表。看起来很难看(至少是事件的双循环和 Controller 中的更多代码),但或多或​​少是正确的(以及出现新情况时需要做什么?)。

对于这种情况,您能提出什么建议吗?我需要如何查询 N-N 关系以及在我的代码中的什么位置?

最佳答案

只要您在事件实体上正确设置了关系,您就应该能够在需要时延迟加载用户。因此,例如,当遍历您的事件时,您应该能够调用..

$event->getUsers();

Doctrine2 非常适合这些确切类型的操作(在需要时延迟加载内容)。

确保您在事件和用户之间有一个有效的关系,并在您的事件实体中编写一个 getter 以将所有用户作为数组或使用 Doctrine 的 ArrayCollection 类提取。

关于php - Doctrine2 存储库、多对多关联和 Twig 模板 : best practices,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9963336/

相关文章:

node.js - 删除 Mongoose 中的多对多引用

python - 避免在多对多 rel SQLAlchemy 中检索要删除的对象

php - 使用 Slim 框架和 Twig 模板时出错

php - 在 codeigniter 中以数组形式获取查询结果

php - 正则表达式查找以空格分隔的连续新行

php - Symfony2 中翻译的高级定制

symfony - 如何在 Twig 中渲染带有多个参数的 Controller ?

javascript - 了解 ajax 在做什么

php - 没有为约束 Symfony\Component\Validator\Constraints\DateTime Symfony2 配置默认选项

python - 如何按字母顺序对多对多 django-admin 框中的值进行排序?