Hola tengo problemas al agregar un nuevo formulario a la colección, este es el código del action:
Código PHP:
public function actualizarNacimientosDeMadreAction(Request $request)
{
if ($request->isXmlHttpRequest())
{
$idIngreso = intval($request->get('ingresoId', 0));
$em = $this->getDoctrine()->getManager();
$ingreso = $em->getRepository('AppBundle:Ingreso')->obtenerUnoJoinUnidadIngreso($idIngreso);
if (is_null($ingreso))
{
return new Response("No se encontró el registro seleccionado.", 404);
}
$embarazada = $ingreso->getEmbarazada();
$nacimientosAlmacenados = new DoctrineCommonCollectionsArrayCollection();
foreach ($embarazada->getNacimientos() as $nacimiento)
{
$nacimientosAlmacenados->add($nacimiento);
}
$form = $this->createForm(AppBundleFormRegistroNacimientosType::class, $embarazada, array(
'action' => $this->generateUrl('nacimiento_actualizar', array('ingresoId' => $ingreso->getId()))
));
$form->get('nombreMadre')->setData($embarazada->getNombre());
if ($request->isMethod('POST'))
{
$form->handleRequest($request);
if ($form->isValid())
{
$contador = 1;
// eliminar la relacion entre embarazada y nacimiento
foreach ($nacimientosAlmacenados as $nacimiento)
{
if(false === $embarazada->getNacimientos()->contains($nacimiento)){
$embarazada->getNacimientos()->removeElement($nacimiento);
$em->remove($nacimiento);
}else{
$nacimiento->setMadre($embarazada);
$nacimiento->setHospital($ingreso->getUnidadDeIngreso());
$nacimiento->setMunicipioPertenece($embarazada->getEstructuraOrganizativa()->getParent()->getParent()->getParent());
$nacimiento->setAnho(intval($nacimiento->getFechaNacimiento()->format('Y')));
$nacimiento->setEdadMadre($nacimiento->getMadre()->getEdad(new DateTime($nacimiento->getFechaNacimiento()->format('Y-m-d'))));
$nacimiento->setSemanaGestacionMadre($embarazada->getEdadGestacional(new DateTime($nacimiento->getFechaNacimiento()->format('Y-m-d'))));
$nacimiento->setTipoPartoDeLaMadre($nacimiento->getMadre()->getTipoPartoTuvo());
$nacimiento->setNumero($contador);
// la fecha de finalizado el embarazo tomara la fecha de nacimiento de la ultima criatura.
$embarazada->setFechaFinalizado(new DateTime($nacimiento->getFechaNacimiento()->format('Y-m-d')));
$embarazada->setEdadGestacionalFinaliza($embarazada->getEdadGestacional(new DateTime($nacimiento->getFechaNacimiento()->format('Y-m-d'))));
$embarazada->getNacimientos()->add($nacimiento);
$em->persist($nacimiento);
$contador++;
}
}
$embarazada->setEmbarazoFinalizado(true);
$em->persist($embarazada);
$em->flush();
$data = array(
'operacion' => 'actualizar_filas',
'msg' => 'La operación se completó satisfactoriamente.',
'data' => array($embarazada->getNombre(), $embarazada->getEdad(), $embarazada->getEdadGestacionalFinaliza() . " sem."),
);
return new SymfonyComponentHttpFoundationJsonResponse($data);
} else
{
return new Response($this->renderView('AppBundle:Ingreso:registrarNacimientoForm.html.twig', array('form' => $form->createView())), 406);
}
}
return $this->render('AppBundle:Ingreso:registrarNacimientoForm.html.twig', array('form' => $form->createView()));
} else
{
throw $this->createNotFoundException("Recurso no encontrado.");
}
}
De esta manera, si le elimino un formulario a la coleccion en la vista, en el action se elimina también de la BD, el problema es cuando le agrego un nuevo formulario en la vista, sería un objeto nuevo, cómo le asocio los atributos similar al código dentro del foreach pero para la nueva entidad o las nuevas entidades en dependencia de cuántos formularios se agreguen a la colección??