我有以下问题:
想象一下,我们有一个实体,例如事件
在 EventRepository 类中,我添加了一些查询某种事件的方法。
在 EventController 中,我收到了一系列事件。最后一步 - 在模板中显示所有这些事件。基本上没有什么困难:
{% for event in events %}...{% endfor %}
但我有一个额外的条件:我需要显示转到每个事件的用户(例如每个用户10个用户)。事件链接到具有多对多关联的用户。好的,我已经在EventRepository中添加了方法来查找事件参与者。但我无法访问Twig模板中的EventRepository ... :(
我看到三个选项:
{% for event in events %}{% set participants = event.participants %}{% endfor %}
。这有效,但是当我们有参与者数量超过1000? Afaik event-> getParticipants()将立即查询所有1000多个用户,这将打破我的页面。{% for event in events %}{% set participants = eventRepository.getEventParticipants(event.id, max) %}{% endfor %}
。这看起来更正确,但看起来这打破了核心MVC概念 - 在模板中查询数据库。你能为这个案子提出任何建议吗?我如何查询N-N关系以及我的代码中的位置?
答案 0 :(得分:1)
只要在您的Event实体上正确设置了您的关系,您就应该能够在需要时延迟加载用户。因此,例如在迭代您的事件时,您应该能够调用..
$event->getUsers();
Doctrine2非常适合这些确切类型的操作(在需要时延迟加载内容)。
确保事件和用户之间存在有效关系,并在Events实体中编写一个getter,将所有用户拉出为数组,或者使用Doctrine的ArrayCollection类。