Guardar un select multiple en un campo many to many

36 views
Skip to first unread message

Oriol Jiménez

unread,
Mar 13, 2015, 10:04:11 AM3/13/15
to Grupo Symfony
Hola de nuevo, traigo otro problema que me ha surgido que seguro que es una tontería pero no doy con la solución, a ver si rápidamente sabéis por donde fallo, pues resulta que tengo las siguientes entities:

namespace Selvert\CorporativaBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Predefinido
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Predefinido
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nombre", type="string", length=255, nullable=true)
     */
    private $nombre;

    /**
     * @ORM\ManyToMany(targetEntity="Filtro", mappedBy="predefinidos")
     **/
    private $filtros;

    public function __construct() {
        $this->filtros = new ArrayCollection();
    }
    /*
     * Deberia añadir al array el filtro pasado
     */
    public function addFiltro(\Selvert\CorporativaBundle\Entity\Filtro $filtro) {
        $this->filtros->add($filtro);
    }

    /*
     * Debería volcar todo el array y sobreescribir lo anterior
     */
    public function setFiltros(ArrayCollection $filtros) {
        $this->filtros=$filtros;
    }
    
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Get nombre
     *
     * @return string
     */
    public function getNombre()
    {
            return $this->nombre;
    }

    /**
     * Set nombre
     *
     * @param string $nombre
     * @return Predefinido
     */
    public function setNombre($nombre)
    {
            $this->nombre = $nombre;
     
        return $this;
    }
    public function __toString()
    {
        return $this->getNombre();
    }
}

namespace Selvert\CorporativaBundle\Entity;

use Doctrine\ORM\Mapping\OrderBy;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Filtro
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Filtro
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

/**
     * @var string
     *
     * @ORM\Column(name="nombre", type="string", length=255, nullable=true)
     */
    private $nombre;

    /**
     * @ORM\ManyToMany(targetEntity="Predefinido", inversedBy="filtros")
     * @ORM\JoinTable(name="predefinidos_filtros")
     * */
    private $predefinidos;
    
    
    public function __construct() {
        $this->predefinidos = new ArrayCollection();
    }
   /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Get nombre
     *
     * @return string
     */
    public function getNombre()
    {
            return $this->nombre;
    }

    /**
     * Set nombre
     *
     * @param string $nombre
     * @return Filtro
     */
    public function setNombre($nombre)
    {
            $this->nombre = $nombre;
     
        return $this;
    }
    /**
     * Set predefinidos
     *
     * @param string $predefinidos
     * @return Filtro
     */
    public function setPredefinidos($predefinidos)
    {
        $this->predefinidos = $predefinidos;

        return $this;
    }

    /**
     * Get predefinidos
     *
     * @return string
     */
    public function getPredefinidos()
    {
        return $this->predefinidos;
    }
}

Pues bien me interesa guardar mediante un select multiple la colección de filtros en la entidad Predefinido, cuando lo hago mediante el form no tengo problema ya que lo hace perfectamente pero cuando intento hacerlo yo por código, no se me graba, tampoco me genera error pero no graba nada, pongo lo que hago:

He intentado 2 cosas:

Lo primero volcar todo un arrayCollection y hacer el persist:

            $id=$entity->getId();            
            $objPredefinido = $em->find('SelvertCorporativaBundle:Predefinido', $id);

            $aFiltros=new ArrayCollection();
            if ($request->request->get("filtros")) {
                foreach ($request->request->get("filtros") as $iFiltro) {
                    $objFiltro = $em->find('SelvertCorporativaBundle:Filtro', $iFiltro);
                    $aFiltros->add($objFiltro);
                }
            }
            $objPredefinido->setFiltros($aFiltros);

            $em->persist($objPredefinido);
            $em->flush(); 
Lo segundo volcar 1 a 1 los elementos

            $id=$entity->getId();            
            $objPredefinido = $em->find('SelvertCorporativaBundle:Predefinido', $id);

            if ($request->request->get("filtros")) {
                foreach ($request->request->get("filtros") as $iFiltro) {
                    $objFiltro = $em->find('SelvertCorporativaBundle:Filtro', $iFiltro);
                    $objPredefinido->addFiltro($objFiltro);
                }
            }
            $em->persist($objPredefinido);
            $em->flush(); 
-- 
Oriol.

Oriol Jiménez

unread,
Mar 16, 2015, 6:37:51 AM3/16/15
to Grupo Symfony
--
Oriol.
Reply all
Reply to author
Forward
0 new messages