如何将存储在会话中的实体传递给新实体


How to pass an entity stored in session to new entity

我在会话中存储一个实体:

$equipoActividad = new EquiposActividades();
$equipoActividad->setEquipoControl($equipoControlExiste);
$actividadObj=$em->getRepository('AgcManagerBundle:Actividad')->findOneBy(array('idActividad'=>$idActividad));
$equipoActividad->setActividad($actividadObj);
$equipoActividad->setIdUsuario($user->getIdUser());
$tipoTransmision = new TipoTransmision();
$tipoTransmision->setIdTipoTransmision(0);
$protocolo = new Protocolo();
$protocolo->setIdProtocolo(0);
$equipoActividad->setTipoTransmision($tipoTransmision);
$equipoActividad->setProtocolo($protocolo);
$request->getSession()->set("equipoActividad", $equipoActividad);

在我将这个实体存储到一个新实体中之后:

$equipoActividad = new EquiposActividades();
$equipoActividad = $request->getSession()->get("equipoActividad");

这就是错误:

传递给选择字段的实体必须进行管理。也许在实体经理中坚持它们?

更新:

$equipoActividad = $request->getSession()->get("equipoActividad");
$equipoActividad = $em->merge($equipoActividad);
/* The next code is this*/
$formulario = $this->createForm(new EquipoActividadType(array('idUsuario' => $user->getIdUser())), $equipoActividad);          
$formulario->handleRequest($request);

错误:

Entity was not found. 
$equipoActividad = $request->getSession()->get("equipoActividad");

然后

$em->merge($equipoActividad);

所有将由学说处理的实体都需要管理。会话对象不再存在。因此,您不需要创建一个全新的实体,因为使用merge(),实体管理器会负责您再次管理该实体,从那时起,您可以像从数据库中获取一样使用它。

如果你想了解更多,请阅读http://doctrine-orm.readthedocs.org/en/latest/cookbook/entities-in-session.html


编辑

这里的错误是由于您的对象状态造成的:事实上,您在会话存储之前没有持久化它(合并需要实体已经持久化并刷新到数据库(。您可以在存储到会话中之前或之后,当您使用会话检索功能时,对其进行持久化/刷新。

顺便说一句,如果你不需要的话,你也可以不坚持:(