symfony relacion inversa OneToMany


en la practica existirá una relación (definida en la tabla) de tipo ManyToOne
pero cada relación se puede pensar también como de ida y vuelta, o en ambos sentidos.
Asi como muchas GenusNote se pueden referir a una Genus. (ManyToOne)
Una Genus puede tener muchos GenusNote (oneToMany)

Lo que nos permitirá obtener las notes desde genus.
este cambio no afectará la estructura de las tablas por lo que no se necesitará crear el archivo de migration.

class Genus{

...

/**
* @ORM\OneToMany(targetEntity="GenusNote", mappedBy="genus")
*/
private $notes;

public function __construct()
{
$this->notes = new ArrayCollection();
}

public function getNotes(){
return $this->notes;
}
...
}

notar que no se agregó el método setNotes(..)
ya que el seteo se hace sólo del lado del propietario.

en GenusNote agregamos esta pequeña modificación:

class GenusNote
{
...
/**
     * @ORM\ManyToOne(targetEntity="Genus", inversedBy="notes")
     * @ORM\JoinColumn(nullable=false)
     */
    private $genus;

...
}

en el controller podemos tener algo asi:

class GenusController extends Controller{
...
        /**
* @Route("/list-notes-by-genus")
*/
public function listAction()
{
$em = $this->getDoctrine()->getManager();

$genuses = $em->getRepository("AppBundle\Entity\Genus")->findAll();

foreach($genuses as $genus){
foreach ($genus->getNotes() as $note) {
dump($note);
}

}

return new Response("hecho!");
}

...
}

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable