Bueno, como ya es costumbre me respondo solo...
Lo primero es cambiar en la Entidad "SuscripcionXcandidato", lo teniamos asi
Código HTML:
Ver original/**
* Set sxcsuscripcionid
*
* @param \Acme\PruebaBundle\Entity\Suscripciones $sxcsuscripcionid
* @return SuscripcionXcandidato
*/
public function setSxcsuscripcionid(\Acme\PruebaBundle\Entity\Suscripciones $sxcsuscripcionid = null)
{
$this->sxcsuscripcionid = $sxcsuscripcionid;
return $this;
}
Ya no guardaremos una Entidad, si no que un ArrayCollection
Código HTML:
Ver original/**
* Set sxcsuscripcionid
*
* @param \Doctrine\Common\Collections\Collection $sxcsuscripcionid
* @return \Doctrine\Common\Collections\Collection
*/
public function setSxcsuscripcionid($sxcsuscripcionid)
{
$this->sxcsuscripcionid = $sxcsuscripcionid;
return $this;
}
Y en nuestro controller
Código HTML:
Ver originaluse Doctrine\ORM\EntityRepository;
public function cvSuscripcionesAction()
{
$id = $this->getUser()->getid();
$em = $this->getDoctrine()->getManager();
//Traemos las Suscripciones de Candidato (retorna un array normal)
$datosForm = $em->getRepository('AcmePruebaBundle:SuscripcionXcandidato')->findSuscripcionCandidato($id);
$entity = new SuscripcionXcandidato();
$formSuscripciones = new \Doctrine\Common\Collections\ArrayCollection();
//Buscamos la suscripcion seleccionada y lo agregamos a nuestro ArrayCollection
foreach($datosForm as $item)
{
$suscripciones = $em->getReference('Acme\PruebaBundle\Entity\Suscripciones', $item->getSxcsuscripcionid()->getId());
$formSuscripciones->add($suscripciones);
}
//Seteamos el ArrayCollection en nuestra entidad
$entity->setSxcsuscripcionid($formSuscripciones);
//Creamos el Formulario en el mismo Controller
$form = $this->createFormBuilder($entity)
->add('sxcsuscripcionid', 'entity',
array(
'class' => 'AcmePruebaBundle:Suscripciones',
'label' => ' ',
'expanded' => true,
'multiple' => true,
'required' => false,
'attr' => array('class' => 'div_cvSuscripciones_checkbox')
)
)
->getForm()
;
//Variables que se ocupan en algunos casos
$request = $this->getRequest();
//Si se envio, verificamos, si no, seteamos un formulario nuevo
if($request->getMethod() === 'POST')
{
$form->bind($request);
//Si el formulario es valido, y no contiene errores, ingresamos
if ($form->isValid())
{
//Removemos las existentes
foreach($datosForm as $item) {
$em->remove($item);
}
//Agregamos las suscripciones seleccionadas
foreach ($entity->getSxcsuscripcionid() as $suscripcion)
{
$addSuscripcion = new SuscripcionXcandidato();
$addSuscripcion->setSxcid($this->getUser());
$addSuscripcion->setSxcsuscripcionid($suscripcion);
$em->persist($addSuscripcion);
}
$em->flush();
//Redireccionamos a la siguiente pagina
return $this->redirect(...);
}
}
return $this->render('AcmePruebaBundle:Prueba:suscripciones.html.twig', array(
'entity' => $entity,
'form' => $form->createView()
));
}
Eso...