Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/01/2017, 15:19
X_fran
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 1 mes
Puntos: 5
Problemas al agregar nuevo formulario a la coleccion

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??