Relaciones en Doctrine 2: One to many

Tutoriales sobre Doctrine 2

En este tutorial vamos a ver lo sencillo que es implementar las relaciones one-to-many y many-to-one haciendo uso de las entidades de Doctrine, para este ejemplo vamos a definir una relación one-to-many User -> Post y many-to-one Post -> User, un usuario puede tener muchos posts mientras un post sólo puede pertenecer a un usuario.

Así veremos cómo establecer este tipo de relaciones y también a hacer la eliminación en cascada, es decir, cuando un usuario sea eliminado también se eliminarán sus posts.

Doctrine 2 nos permite manejar las relaciones más complejas de forma muy sencilla y todo ello simplemente haciendo uso de anotaciones.

Si tienes dudas en lo referente a la instalación de Doctrine 2 y necesitas más información, a continuación dejo la lista de entradas del blog sobre Doctrine 2.

Entidad User

La entidad User tendrá el siguiente aspecto.


Lo más interesante de todo es la propiedad posts, a ésta le asignamos la relación con la entidad Post, si te fijas, el último método devuelve esta propiedad llamando a un método toArray que está disponible en Doctrine\Common\Collections\ArrayCollection, el cuál devuelve un array representando a dicha colección, en este caso posts.

La entidad Post

La entidad post será más sencilla y hará la relación a la inversa.


Aquí, aparte de los setters, getters y la propiedad user que define la relación de un post con un usuario, tenemos el método setUser el cuál recibe una instancia de la entidad User para así poder establecer correctamente la relación.

Crear un usuario

Crear un post

Obtener un usuario y todos sus posts

Obtener un post y acceder a los datos del creador


Si te fijas, aquí accedemos al método getUser() de la entidad Post y al método getUsername(), disponible en la entidad User para poder obtener los datos del usuario que lo ha creado.

Eliminar un usuario y todos sus posts


Al haber definido la anotación @OneToMany(targetEntity=”Post”, mappedBy=”user”, cascade={“persist”, “remove”}) sobre la propiedad posts en la entidad User no tenemos que hacer nada, los posts de cada usuario serán eliminados en el momento en el que se elimine el usuario.

Así de sencillo es manejar este tipo de relaciones en Doctrine 2.

Añade un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies
Descuentos de hasta el 50% por el Black Friday en CursosdesarrollowebAcceder ahora
+ +