Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/04/2013, 14:45
Avatar de fhederico
fhederico
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 3 meses
Puntos: 23
Respuesta: Guardar un ArrayCollection en la BD

Bueno, como ya es costumbre me respondo solo...

Lo primero es cambiar en la Entidad "SuscripcionXcandidato", lo teniamos asi

Código HTML:
Ver original
  1. /**
  2.      * Set sxcsuscripcionid
  3.      *
  4.      * @param \Acme\PruebaBundle\Entity\Suscripciones $sxcsuscripcionid
  5.      * @return SuscripcionXcandidato
  6.      */
  7.     public function setSxcsuscripcionid(\Acme\PruebaBundle\Entity\Suscripciones $sxcsuscripcionid = null)
  8.     {
  9.         $this->sxcsuscripcionid = $sxcsuscripcionid;
  10.    
  11.         return $this;
  12.     }

Ya no guardaremos una Entidad, si no que un ArrayCollection

Código HTML:
Ver original
  1. /**
  2.      * Set sxcsuscripcionid
  3.      *
  4.      * @param \Doctrine\Common\Collections\Collection $sxcsuscripcionid
  5.      * @return \Doctrine\Common\Collections\Collection
  6.      */
  7.     public function setSxcsuscripcionid($sxcsuscripcionid)
  8.     {
  9.         $this->sxcsuscripcionid = $sxcsuscripcionid;
  10.    
  11.         return $this;
  12.     }

Y en nuestro controller


Código HTML:
Ver original
  1. use Doctrine\ORM\EntityRepository;
  2.  
  3.  
  4. public function cvSuscripcionesAction()
  5.     {
  6.         $id = $this->getUser()->getid();
  7.            
  8.         $em = $this->getDoctrine()->getManager();
  9.            
  10.         //Traemos las Suscripciones de Candidato (retorna un array normal)
  11.         $datosForm = $em->getRepository('AcmePruebaBundle:SuscripcionXcandidato')->findSuscripcionCandidato($id);
  12.        
  13.         $entity = new SuscripcionXcandidato();
  14.  
  15.         $formSuscripciones = new \Doctrine\Common\Collections\ArrayCollection();
  16.        
  17.             //Buscamos la suscripcion seleccionada y lo agregamos a nuestro ArrayCollection
  18.         foreach($datosForm as $item)
  19.         {
  20.             $suscripciones = $em->getReference('Acme\PruebaBundle\Entity\Suscripciones', $item->getSxcsuscripcionid()->getId());
  21.             $formSuscripciones->add($suscripciones);
  22.         }
  23.        
  24.     //Seteamos el ArrayCollection en nuestra entidad
  25.         $entity->setSxcsuscripcionid($formSuscripciones);
  26.        
  27.         //Creamos el Formulario en el mismo Controller
  28.         $form   = $this->createFormBuilder($entity)
  29.             ->add('sxcsuscripcionid', 'entity',
  30.                 array(
  31.                     'class' => 'AcmePruebaBundle:Suscripciones',
  32.                     'label' => ' ',
  33.                     'expanded' => true,
  34.                     'multiple' => true,
  35.                     'required' => false,
  36.                     'attr' => array('class' => 'div_cvSuscripciones_checkbox')
  37.                 )
  38.             )
  39.             ->getForm()
  40.         ;
  41.        
  42.        
  43.         //Variables que se ocupan en algunos casos
  44.         $request = $this->getRequest();    
  45.        
  46.         //Si se envio, verificamos, si no, seteamos un formulario nuevo
  47.         if($request->getMethod() === 'POST')
  48.         {
  49.             $form->bind($request);         
  50.            
  51.             //Si el formulario es valido, y no contiene errores, ingresamos
  52.             if ($form->isValid())
  53.             {
  54.                 //Removemos las existentes
  55.                 foreach($datosForm as $item) {
  56.                     $em->remove($item);
  57.                 }
  58.                
  59.                 //Agregamos las suscripciones seleccionadas
  60.                 foreach ($entity->getSxcsuscripcionid() as $suscripcion)
  61.                 {
  62.                     $addSuscripcion = new SuscripcionXcandidato();
  63.                     $addSuscripcion->setSxcid($this->getUser());
  64.                     $addSuscripcion->setSxcsuscripcionid($suscripcion);
  65.                     $em->persist($addSuscripcion);
  66.                 }
  67.  
  68.                 $em->flush();
  69.                
  70.                 //Redireccionamos a la siguiente pagina
  71.                 return $this->redirect(...);
  72.             }
  73.         }
  74.  
  75.  
  76.         return $this->render('AcmePruebaBundle:Prueba:suscripciones.html.twig', array(
  77.             'entity' => $entity,
  78.             'form'   => $form->createView()
  79.         ));    
  80.     }

Eso...

Última edición por fhederico; 15/04/2013 a las 16:57