Contenido del curso

Manos a la obra con nuestro proyecto

Relaciones entre tablas con belongsTo en Laravel

Resumen

Crear relaciones entre tablas en Laravel te permite conectar datos sin duplicar información. Aprenderás a vincular publicaciones con usuarios usando foreign keys, factories y el método belongsTo de Eloquent, una práctica clave para cualquier desarrollador backend que trabaje con bases de datos relacionales.

La idea central es simple: un usuario tiene muchas publicaciones y cada publicación pertenece a un usuario. Vamos a traducir esa lógica al código.

¿Cómo agregar una clave foránea en una migración de Laravel?

Todo empieza en el archivo de migración de la tabla de publicaciones. Ahí defines la columna que servirá como puente hacia la tabla de usuarios.

La configuración del campo necesita tres características concretas:

  • Tipo entero, porque guardará un id numérico.
  • Sin signo (unsigned), para aceptar solo números positivos.
  • Nombre user_id, siguiendo la convención de Laravel.

Así se ve el campo y su relación foránea dentro de la migración:

php $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users');

La primera línea crea la columna. La segunda le dice a la base de datos que ese user_id apunta al campo id de la tabla users. Y aquí viene lo interesante: la relación queda registrada en la base de datos, pero Laravel todavía no la conoce a nivel de modelo.

¿Qué hace unsigned en una migración? Restringe la columna a valores numéricos positivos. Es el estándar para foreign keys porque los id nunca son negativos.

¿Cómo poblar la nueva columna con un Factory?

Al agregar un campo nuevo, tus datos seed o falsos también deben actualizarse. Si no lo haces, el factory generará registros incompletos y romperá las pruebas.

En el archivo factory de la publicación añades el user_id con un valor fijo:

php 'user_id' => 1,

Se asigna 1 porque en este punto del proyecto solo existe un usuario de prueba. Como trabajas con datos semilla, puedes ejecutar de nuevo las migraciones, borrar todo y reconstruir la base desde cero sin perder información valiosa.

Esta técnica funciona perfecto cuando arrancas un proyecto y los datos aún no son importantes. Más adelante, cuando tengas información real, este tipo de cambios requieren otra estrategia.

¿Por qué Laravel necesita el método belongsTo en el modelo?

La relación ya existe en la base de datos, pero Eloquent es independiente: necesita que se la declares en el modelo.

Si intentas mostrar el nombre del usuario directamente desde una publicación, el sistema lanza un error indicando que intenta acceder a una propiedad name sobre un objeto nulo. Ese error es la señal de que falta declarar la relación en el modelo Post.

Dentro del modelo Post agregas el método en singular, porque cada publicación pertenece a un único usuario:

php public function user() { return $this->belongsTo(User::class); }

El nombre del método, user, se escribe en singular de forma intencional. Esto le indica a Laravel que la relación es de pertenencia: una publicación pertenece a un usuario.

¿Qué diferencia hay entre hasMany y belongsTo? belongsTo se usa en el modelo hijo (Post) para apuntar al padre. hasMany se usa en el modelo padre (User) para listar muchos hijos. Son las dos caras de la misma relación.

¿Cómo mostrar el usuario de cada publicación en la vista?

Una vez registrada la relación en el modelo, ya puedes acceder al usuario desde cualquier publicación en tus vistas Blade.

En la página del blog, dentro del listado de publicaciones, agregas un span que imprima el nombre del autor:

blade <span>{{ $post->user->name }}</span>

Al actualizar el navegador, cada publicación muestra correctamente el nombre del usuario que la creó. Ese es el beneficio real de las relaciones: no duplicas el nombre del usuario en cada publicación, solo guardas su id y Eloquent se encarga del resto.

Conceptos clave para dominar relaciones en Laravel

Durante el desarrollo aparecen varios términos que conviene entender bien:

  • Migración: archivo que define la estructura de la tabla y permite versionar cambios en la base de datos.
  • Foreign key: campo que conecta una tabla con otra, garantizando integridad referencial.
  • Factory: clase que genera datos falsos para pruebas y desarrollo.
  • Eloquent: el ORM de Laravel que traduce relaciones SQL en métodos PHP.
  • belongsTo: método que declara una relación de pertenencia en el modelo hijo.

La práctica para esta clase es clara: configura la migración con la foreign key, ajusta el factory con el user_id, refresca la base de datos y agrega el método user() en el modelo Post. Después modifica la vista para mostrar quién creó cada publicación.

¿Ya lograste mostrar el nombre del autor en tu blog? Cuéntame en los comentarios qué dificultades encontraste al configurar tu primera relación.