Symfony 在条令2中建立非持久性关系

Symfony 在条令2中建立非持久性关系,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,我有一个对象$user,它与$Establish有一对多关系。我可以使用: $user->getEstablishments(); 用户可以选择要处理的机构。我在控制器中调用了以下方法: $user->setCurrentEstablishment($establishment); 我在视图中称之为: $establishment = $user->getCurrentEstablishment(); 我想打电话: $user->setCurrentEstablis

我有一个对象$user,它与$Establish有一对多关系。我可以使用:

$user->getEstablishments();
用户可以选择要处理的机构。我在控制器中调用了以下方法:

$user->setCurrentEstablishment($establishment);
我在视图中称之为:

$establishment = $user->getCurrentEstablishment();
我想打电话:

$user->setCurrentEstablishmentBy Slug($establishment_slug);
其中slug是一个字符串,让用户对象查找建立

条令不鼓励在实体对象内部访问实体管理器,但我认为在控制器中使用它更糟糕

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


有吗?我怎么能这么做

条令中没有可以将slug转换为object的
注释

可以帮助您的是
ParamConverter
,使用它您可以自动将slug从查询转换为对象。但它仍然必须在控制器中使用

用法示例:

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

关于param converter的文档:

为什么您认为在控制器中使用实体管理器不好?您应该在控制器或服务中使用实体管理器(例如,UserService-您需要创建它)。并不是说在控制器中使用实体管理器不好。这是实体应该给你一些关于它自己的相关数据,而不需要你自己在控制器中收集。就像它提供了通常的持久性关系一样,它应该提供运行时的非持久性关系,在我的示例中,还应该提供slug的相关记录。只是我的意见。我是唯一一个认为不能做到这一点很糟糕的人吗?