Hola,
Os planteo mi duda. Tengo una EntidadA y una EntidadB con una relación OneToMany y ManyToOne respectivamente. Desde la EntidadA puedo obtener todas las EntidadB relacionadas y en EntidadB la EntidadA, si es que tiene asociada alguna.
Pues lo que quiero es que al crear/editar una EntidadA, uno de los campos sea un select multiple que me permita seleccionar una o varias EntidadB. Añado este campo en mi FormType
como un campo de tipo entity
pero cuando guardo no hace nada. No falla, pero no hace nada. Como aquí somos de código pego parte de lo que tengo y seguro nos entendemos mejor:
... /** * @var ArrayCollection * * @ORM\OneToMany(targetEntity="Reader", mappedBy="laundry", cascade={"persist"}) * @Exclude() */ private $readers; public function __construct() { ... $this->readers = new ArrayCollection(); } ...
... /** * @var Laundry * * @ORM\ManyToOne(targetEntity="Laundry", inversedBy="readers") * @ORM\JoinColumn(name="laundry_id", referencedColumnName="id") */ private $laundry; ...
Por supuesto tiene sus metodos addXXX
, removeXXX
, getXXX
y hasta un setXXX
que recibe un ArrayCollection
.
De momento lo he solucionado en el controlador, al guardar obtengo todos los readers, reseteo las relaciones y guardo las nuevas relaciones. Funciona, pero estoy seguro de que hay una forma mas elegante y practica, esa es mi duda.
¿Existe alguna forma de hacer lo que busco?. No quiero un formulario embebido ya que no voy a añadir readers, estos se gestionan en otra parte, y ademas por estética prefiero el select.
Gracias.
Un saludo.
Respuestas
No se cómo tienes los métodos Set de las entidades, pero fíjate que tengas bien diseñado el método setReaders()
debe ser mas o menos así.
public function setReaders(\Doctrine\Common\Collections\Collection $readers) { $this->readers = $readers; foreach ($readers as $reader) { $readers->setLaundry($this); } }
No se si esto resuelve tu duda.
Un saludo.
@miguelplazasr