在Doctrine 2中设置非持久关系

时间:2016-03-05 12:41:13

标签: symfony doctrine-orm doctrine

我有一个对象$ user,与$ establishment有一对多的关系。我可以用:

$user->getEstablishments();

用户可以选择要继续工作的建立。我有这个方法,我在控制器中调用:

$user->setCurrentEstablishment($establishment);

我在视图中称之为:

$establishment = $user->getCurrentEstablishment();

我希望能够致电:

$user->setCurrentEstablishmentBy Slug($establishment_slug);

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

Doctrine不鼓励在Entity对象中访问Entity Manager,但我认为在控制器中使用它实际上更糟糕。

我怀疑存在一些特殊的Doctrine注释来处理这样的非持久关系,或者除了通过服务为实体管理器提供服务之外的某些方法应该在这里使用。从模型内部引用其他实体的一些简单方法。

¿有吗?我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

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

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

使用示例:

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

关于参数转换器的文档:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html