2016-03-05 4 views
1

У меня есть объект $ user, который имеет отношение «один к большому» с $становкой. Я могу использовать:Настроить ненасыщенное отношение в Doctrine 2

$user->getEstablishments(); 

Пользователь может выбрать элемент, над которым будет работать. У меня есть этот метод, который я называю в контроллере:

$user->setCurrentEstablishment($establishment); 

И это тот, который я называю в представлении:

$establishment = $user->getCurrentEstablishment(); 

Я хочу, чтобы быть в состоянии назвать:

$user->setCurrentEstablishmentBy Slug($establishment_slug); 

где slug - это строка, и пусть объект пользователя ищет установление.

Doctrine препятствует практике доступа к Менеджеру сущности внутри объекта Entity, но я думаю, что использование его в контроллере еще хуже.

Я подозреваю, что существует какая-то специальная аннотация для Doctrine, которая заботится о ненастоящих отношениях, подобных этому, или какой-либо метод, отличный от обслуживания администратора Entity через службу, должен использоваться здесь. Простой способ ссылки на другие объекты внутри модели.

¿Есть ли какие-либо? ¿Как я мог это сделать?

+3

Почему вы думаете, с помощью диспетчера сущностей в контроллер плохо? – Cerad

+0

Вы должны это сделать в контроллере или в сервисе (например, UserService - вам нужно будет его создать). –

+0

Это не значит, что использование диспетчера сущности в контроллере плохое. Дело в том, что сущность должна предоставить вам некоторые связанные данные о себе, если вы не будете сами их собирать в контроллере. Точно так же, как это дает вам обычные постоянные отношения, он должен давать вам время выполнения, не стойкие отношения, как, например, в моем примере связанную запись с помощью slug. Просто мое мнение. –

ответ

1

В Доктрине нет Annotation, который может преобразовывать слизню в объект.

Что может помочь вам ParamConverter, с его помощью вы можете автоматически конвертировать slug из запроса в объект. Но он все равно должен использоваться в контроллере.

Пример использования:

/** 
* @Route("/some-route/{slug}") 
* @ParamConverter("object", class="AppBundle:Establishment", options={"id" = "slug", "repository_method" = "findEstablishmentBySlug"}) 
*/ 
public function slugAction(Establishment $object) 
{ 
... 

Docs о парам преобразователя: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

+0

Я единственный, кто думает, что не в состоянии это сделать, просто ужасно? –

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