我在会话中存储一个实体:
$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
编辑
这里的错误是由于您的对象状态造成的:事实上,您在会话存储之前没有持久化它(合并需要实体已经持久化并刷新到数据库(。您可以在存储到会话中之前或之后,当您使用会话检索功能时,对其进行持久化/刷新。
顺便说一句,如果你不需要的话,你也可以不坚持:(