Foros del Web » Programando para Internet » PHP » Symfony »

Problemas al agregar nuevo formulario a la coleccion

Estas en el tema de Problemas al agregar nuevo formulario a la coleccion en el foro de Symfony en Foros del Web. 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 )     { ...
  #1 (permalink)  
Antiguo 20/01/2017, 15:19
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 2 meses
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??
  #2 (permalink)  
Antiguo 20/01/2017, 15:28
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 17 años, 2 meses
Puntos: 5
Respuesta: Problemas al agregar nuevo formulario a la coleccion

Bueno, como lo resolví fue iterando nuevamento por la colacción de nacimientos que tiene la embarazada a modificar y preguntando en cada uno de los elementos si es nuevo, es decir si el id ===null, en ese caso, persistirlo.

Código PHP:
foreach ($embarazada->getNacimientos() as $nacimiento)
                    {
                        if (
is_null($nacimiento->getId()))
                        {
                            
$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);
                            
$nacimiento->setDireccionParticular($embarazada->getDireccionParticular());
                            
// 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++;
                        }
                    } 
No se si sea lo óptimo, en definitiva las colecciones de nacidos asociados a la embarzada para convertirla en puérpera no son muy grandes a menos que el usuario se ponga a jugar agregandolo hijos a la colección.

Culaquier mejora por favor explíquenme !!!!!

Etiquetas: coleccion, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:59.