2016-03-05 68 views
1

我有一个对象$ user,它与$ establishment有一对多的关系。我可以使用:在Doctrine 2中设置非永久关系

$user->getEstablishments(); 

用户可以选择一个稳定工作。我有这样的方法,我在控制器中称:我在查看通话

$user->setCurrentEstablishment($establishment); 

这一个:

$establishment = $user->getCurrentEstablishment(); 

我希望能够调用:

$user->setCurrentEstablishmentBy Slug($establishment_slug); 

其中slug是一个字符串,并让用户对象查找建立。

学说不鼓励访问实体对象内的实体管理器的做法,但我认为在控制器中使用它更糟糕。

我怀疑是否存在一些特殊的Doctrine注解来处理像这样的非持久性关系,或者应该使用通过服务为服务实体管理器提供服务以外的其他方法。从模型中引用其他实体的一种简单方法。

¿是否有? ¿我怎么能这样做?

+3

为什么你认为使用实体管理器的控制器是坏? – Cerad

+0

您应该在控制器或服务中(例如UserService - 您需要创建它)。 –

+0

这不是在控制器中使用实体管理器是不好的。这是该实体应该给你一些有关自己的相关数据,而无需你自己收集在控制器中。就像它给你通常的持久关系一样,它也应该为你提供运行时间,非持久性关系,就像在我的例子中,通过slug来记录相关记录。只是我的观点。 –

回答

1

Doctrine中没有Annotation可以将slu convert转换为对象。

什么可以帮助你是ParamConverter,它可以自动将查询中的slu convert转换为对象。但它仍然必须在Controller中使用。

用法示例:

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

文档约PARAM转换器:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

+0

我是唯一一个认为不能做到这一点的人只是很糟糕吗? –