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.