Curso de Laravel Gohu

Base de datos y relaciones en Laravel: el sistema del curso

Por Víctor Peña · Actualizado el

Antes de escribir una sola consulta necesitamos saber contra qué vamos a consultar. Esta lección define el sistema de Mascotas, la base de datos que usaremos durante todo el curso de Laravel Gohu.

No es un trámite previo: cada consulta que escribamos más adelante —un with('refugio'), un whereHas('mascotas'), un join— no es más que recorrer las relaciones que vamos a definir aquí. Si este modelo te queda claro, el resto del curso es aplicar métodos.

Por qué se diseña antes de programar

El análisis previo al desarrollo sirve para identificar los requisitos y las funcionalidades del sistema. La herramienta para hacerlo es el diagrama entidad-relación (DER), una representación gráfica que muestra las entidades, sus atributos y cómo se conectan entre sí.

Consta de tres elementos:

  • Entidades: objetos del mundo real que tienen datos asociados. Cada una acaba siendo una tabla.
  • Atributos: las propiedades de cada entidad. Acaban siendo las columnas.
  • Relaciones: cómo se conectan las entidades. Acaban siendo claves foráneas y métodos de Eloquent.

Si quieres profundizar en cómo se construye uno desde cero, lo desarrollamos en qué es el diagrama entidad-relación.

El sistema de Mascotas

El sistema gestiona la adopción de mascotas en refugios. Todo desarrollo requiere un análisis previo que identifique el alcance, las necesidades del cliente y las variables que van a intervenir.

Entidades y atributos

  • Refugios: nombre, ciudad, dirección, teléfono, encargado.
  • Personas: nombre, apellido, DNI, dirección, teléfono.
  • Mascotas: código, tipo, edad, raza, color, pedigree.
  • Vacunas: tipo, precio.
  • Adopciones: fecha, detalle.

Las relaciones

Uno a uno

  • Una mascota tiene una única adopción.

Uno a muchos

  • Un refugio tiene muchas mascotas.
  • Una persona realiza muchas adopciones.

Muchos a muchos

  • Una mascota tiene muchas vacunas, y una vacuna se aplica a muchas mascotas.

Fíjate en que cada relación está enunciada en los dos sentidos. Es la forma de no equivocarse: leer solo «un refugio tiene muchas mascotas» podría hacerte pensar en un muchos a muchos, hasta que lees la vuelta y ves que cada mascota pertenece a un solo refugio.

El diagrama

Diagrama entidad-relación del sistema de mascotas con las entidades refugios, personas, mascotas, vacunas y adopciones

De la relación al método de Eloquent

Aquí está el puente con el resto del curso. Cada tipo de relación del diagrama se traduce en un par de métodos concretos dentro de los modelos:

Relación en el diagrama En el modelo En el modelo relacionado
Mascota tiene una adopción hasOne belongsTo
Refugio tiene muchas mascotas hasMany belongsTo
Persona realiza muchas adopciones hasMany belongsTo
Mascota tiene muchas vacunas belongsToMany belongsToMany

Y eso se traduce a su vez en la estructura de la base de datos:

  • Uno a muchos guarda la clave foránea en el lado «muchos». La tabla mascotas lleva una columna refugio_id.
  • Muchos a muchos necesita una tabla intermedia. Para mascotas y vacunas será mascota_vacuna, con las dos claves y, en nuestro caso, la fecha de aplicación.

Esa tabla pivote vas a verla aparecer varias veces en el curso, tanto en los joins del Query Builder como en las cargas anidadas de Eloquent. No es un detalle técnico suelto: sale directamente del muchos a muchos de este diagrama.

Qué llevarte de esta lección

Ten el diagrama a mano durante el resto del curso. Cuando escribamos Refugio::with('mascotas.vacunas'), lo que estamos recorriendo son dos relaciones de este modelo, una detrás de otra. Y cuando una consulta no devuelva lo que esperabas, el primer lugar donde mirar casi siempre es aquí.

Para cerrar

Con el modelo de datos definido ya podemos pasar al código. En la siguiente lección creamos los modelos Eloquent con sus relaciones.

Saludos y éxitos.

Norvic Software

Desarrollamos el software que tu empresa necesita

Somos una fábrica de software en Bolivia. Construimos sistemas a medida y aplicaciones móviles, y llevamos Inteligencia Artificial a las empresas que ya tienen un sistema funcionando.

Solicitar cotizaciónVer todos los servicios

Cotización sin costo · Respuesta directa por WhatsApp