Cómo definir relaciones Cero-a-Uno con Doctrine

Home / Cómo hacer para... / Cómo definir relaciones Cero-a-Uno con Doctrine

En general cuando uno comienza a estudiar Bases de Datos Relacionales se habla de un tipo de relación Uno-a-Uno que, en la práctica se usa muy poco. Sin embargo las relaciones tipo Cero-a-Uno tienen muchísimo sentido.

Es el caso de que se quiera modelar un sistema donde una entidad es un caso especial de otra (Algo similar al concepto de herencia de POO), como por ejemplo la relación entre personas y actores:

  • Todos los actores son personas
  • No todas las personas son actores

La forma de implementar esto en una base de datos relacional es poner un campo tipo clave foránea en la tabla hija, el cual a su vez tendrá un índice único (Para reforzar la cardinalidad de la relación).

En el caso del ORM Doctrine, todo esto parte de la definición de la clase Entity.

Pongo un ejemplo de un proyecto en el que trabajé: hay una clase User (De FOSUserBundle) y una clase Taller. Cada taller tiene un responsable, pero no todos los usuarios son responsables de algún taller.

En la clase User está este código

/**
 * @var Taller
 * @ORM\OneToOne(targetEntity="AppBundle\Entity\Taller",mappedBy="responsable")
 */
protected $taller;

Y en la clase Taller este:

/**
 * @var User
 * @ORM\OneToOne(targetEntity="AppBundle\Entity\User", inversedBy="taller")
 */
 private $responsable;

Como podés observar, ambas clases tienen una referencia a la otra, pero en la base de datos, sólo la tabla Taller tiene una referencia a User. Esto se debe a cómo están escritas las definiciones del vínculo OneToOne. Más específicamente, se debe a qué clase tiene el mappedBy y el inversedBy (El lado propietario de la relación es el que debe llevar inversedBy).

Si bien este tipo de relaciones no son lo más común, ciertamente viene bien conocerlas y la posibilidad de definirlas usando las herramientas de Doctrine ayuda mucho.

¿Alguna duda? ¡Dejala en un comentario!

mchojrin

CEO at Leeway
Mauro es Lic. en Ciencias de la Computación.
Su carrera como docente de programación se inició en el año 1997 en la Escuela Técnica ORT.
Actualmente coordina el desarrollo de proyectos web en Leeway y los cursos dictados en la Leeway Academy

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *