如何将存储在会话中的实体传递给新实体
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");
这是错误:
Entities passed to the choice field must be managed. Maybe persist them in the entity manager?
更新:
$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
编辑
这里的错误是由于你的对象状态:事实上你没有在会话存储之前持久化它(合并需要实体已经被持久化并刷新到数据库)。您可以 persist/flush 在存储到会话之前或之后,当您使用会话检索工具时。
顺便说一句,如果你不需要的话,你也可以不坚持:)
我在会话中存储一个实体:
$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");
这是错误:
Entities passed to the choice field must be managed. Maybe persist them in the entity manager?
更新:
$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
编辑
这里的错误是由于你的对象状态:事实上你没有在会话存储之前持久化它(合并需要实体已经被持久化并刷新到数据库)。您可以 persist/flush 在存储到会话之前或之后,当您使用会话检索工具时。
顺便说一句,如果你不需要的话,你也可以不坚持:)