簡體   English   中英

Doctrine2存儲庫,多對多關聯和Twig模板:最佳實踐

[英]Doctrine2 repository, Many-to-Many associations and Twig templates: best practices

我有以下問題:

想象一下,我們有一個實體,例如Event

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實例傳遞給temlpate並為每個事件查詢10個用戶,如下所示: {% for event in events %}{% set participants = eventRepository.getEventParticipants(event.id, max) %}{% endfor %} 這看起來更正確,但看起來這打破了核心MVC概念 - 在模板中查詢數據庫。
  3. 在控制器中循環事件並為每個事件准備參與者列表。 看起來很難看(至少可以在事件中使用dooble循環,在控制器中使用更多代碼),但或多或​​少是正確的(以及新條件出現時需要做什么?)。

你能為這個案子提出任何建議嗎? 我如何查詢NN關系以及我的代碼中的位置?

只要您的事件實體上的關系設置正確,您就應該能夠在需要時延遲加載用戶。 因此,例如在迭代您的事件時,您應該能夠調用..

$event->getUsers();

Doctrine2非常適合這些確切類型的操作(在需要時延遲加載內容)。

確保事件和用戶之間存在有效關系,並在Events實體中編寫getter,以將所有用戶拉出為數組,或者使用Doctrine的ArrayCollection類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM