2015-01-28 2 views
0

Есть и другие вопросы по этому вопросу, но они не охватывают мой прецедент, я думаю.Правильный способ использования репозитория Entity в шаблоне контроллера и Twig

У меня есть Пользователь, у пользователя есть проекты. Проект может быть опубликован или нет.

Внутри Twig (в нескольких местах, в нескольких шаблонах) Я хочу показать количество опубликованных проектов, которые пользователь имеет.

Эта информация не сохраняется непосредственно в объекте Пользователя. Я мог бы написать функцию для этого в User Entity, но это потребует повторения проектов и проверки каждого опубликованного статуса. Это кажется медленным.

Другой способ заключается в том, чтобы написать запрос в пользовательском репо и получить подсчет всех опубликованных проектов. Но это будет означать, что запрос из Repo выполняется в каждом контроллере, а затем назначается каждому представлению Twig. Это кажется субоптимальным, так как мне нужно рассчитывать во многих местах и ​​поэтому повторял бы этот запрос репо во многих местах. Возможно, в каждом контроллере.

Как я могу получить этот счет из Twig, из User Entity или из Repo?

+0

ли запрос с расширения веточки. – Cerad

+0

Вы можете использовать событие Doctrine postLoad (подробнее см .: http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#postload), чтобы установить дополнительные свойства для вашего объекта после его загрузки из своего репозитория , Например, вы можете создать специальные свойства и соответствующие методы set nd get для получения номера проектов для текущего пользователя. – Alex

+0

@ Алекс не страдает от проблем с эффективностью? Это не запрос, а вместо этого перебирает все проекты, чтобы проверить их опубликованный атрибут, чтобы затем создать новую коллекцию проектов. –

ответ

0

Я бы просто подсчет в ProjectEntity, где опубликованный = истинны и идентификатор = идентификатор пользователя и передать данные в шаблон веточки

+0

Но это включает итерацию над проектами, чтобы получить счет, который медленный. –

+0

это очень простой и эффективный sql-запрос ... и, вероятно, нет более эффективного способа, который не будет головной болью – mezod

+0

Что делать, если миллион проектов? Каждый из них нуждается в переходе. Через запрос он намного быстрее, когда индексируется атрибут 'published'. –

Смежные вопросы