Reputation: 503
I store an entity in session:
$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);
After I store this entity into a new entity:
$equipoActividad = new EquiposActividades();
$equipoActividad = $request->getSession()->get("equipoActividad");
This is the error:
Entities passed to the choice field must be managed. Maybe persist them in the entity manager?
UPDATE:
$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);
ERROR:
Entity was not found.
Upvotes: 0
Views: 1031
Reputation: 29942
$equipoActividad = $request->getSession()->get("equipoActividad");
then
$em->merge($equipoActividad);
All entities that will be handle by doctrine need to be managed. Session object aren't anymore. So you don't need to create a brand-new one as with merge()
entity manager takes care for you to manage again that entity and from that time on, you can use it like you've fetched from db.
If you want to know more about, read http://doctrine-orm.readthedocs.org/en/latest/cookbook/entities-in-session.html
Error here is due to your object status: in fact you didn't persisted it before session store (merge need the entity to be already persisted and flushed to db). You can either persist/flush it before storing in session or after it, when you use session retrieval facility.
BTW you can also not persist it if you don't need to :)
Upvotes: 2