Pondré como ejemplo un sistema de gestión de inventarios que cuenta con dos modelos Producto y Categoría en donde un producto pertenece a una categoría y una categoría puede tener varios productos. Para este ejemplo aplica la relación de «uno a muchos». Para implementar las relaciones «uno a muchos» (One to Many) en Laravel sigue estos pasos:
Como mencioné anteriormente para este ejemplo crearé dos modelos: Producto y Categoría con sus respectivas migraciones para ello abre una terminal de comandos en la raíz de tu proyecto en Laravel y primero crea el modelo Category ejecutando la instrucción:
Ahora para crear el modelo Product con su migración ejecuta:
NOTA
. Es importante que los archivos de las migraciones se creen en este orden ya que de otra manera al correr las migraciones arrojará un error.
Con tu editor de textos abre el archivo database/migrations/…create_categories_table.php y agrega el campo «name» para que quede así:
Abre el archivo database/migrations/…create_products_table.php y agrega los siguientes campos:
En el código anterior hay dos métodos clave para definir la relación entre la tabla categories con la tabla products y son unsignedBigInteger y foreign. Con unsignedBigInteger se asigna al campo category_id un tipo de dato entero, positivo y puede ser un valor muy grande. Con foreign se define la llave foránea y la relación entre el campo category_id de la tabla products y el campo id de la tabla categories.
Ahora toca crear las relaciones entre Product y Category a nivel de modelo usando Eloquent, abre el archivo app/Models/Category.php y como una categoría tiene muchos productos se debe usar el método en plural y se debe utilizar hasMany(). Agrega el código a tu archivo:
Abre el archivo app/Models/Product.php y como un producto pertenece a una sola categoría el método debe estar es singular y se debe utilizar belongsTo() para crear la relación inversa como lo muestra el siguiente código:
Para poblar la base de datos con información falsa de prueba se puede realizar haciendo uso de Factories o si quieres ingresar información preestablecida puedes generar Seeders, para este tutorial usaré Factories. En la terminal de comandos ejecuta la instrucción:
Y para crear el Factory del Model Product ejecuta:
Abre el archivo database/factories/CategoryFactory.php y para agregar nombres de categorías falsos de prueba usarás la librería de Laravel Faker, dentro del método definition y dentro del array return agrega el siguiente código:
En el archivo database/factories/ProductFactory.php copia y pega este código que hará que la tabla products se poble de datos falsos de prueba:
Abre el archivo database/seeders/DatabaseSeeder.php dentro del método run() agrega estas dos líneas de código que lo que hacen es generar el contenido de prueba:
NOTA
. Recuerda importar los modelos Product y Category al inicio del archivo DatabaseSeeder.php y también recuerda haber creado una base de datos y estar conectado a ella configurando los datos de acceso en el archivo .env. Corre las migraciones y los factories ejecutando el comando:
Si abres tu cliente de gestión de base de datos como PHPMyAdmin, Heidi o MySQL Workbench y verás que las tablas products y categories se han poblado con datos de prueba y están manteniendo la relación de uno a muchos entre ellas.
Laravel tiene integrada una poderosa herramienta de desarrollo llamada Tinker con la que puedes realizar consultas de prueba a las tablas relacionadas en la base de datos, para llamar a Tinker desde la terminal ejecuta el comando:
En la consola de Tinker puedes verificar si las relaciones se hicieron correctamente. Para trabajar con el modelo Product escribe aunque esta instrucción es opcional es buena práctica usarla:
En Tinker puedes usar las instrucciones de Eloquent que normalmente utilizas en los controladores para hacer consultas a la base de datos. Por ejemplo para pedir la información del artículo cuyo ID es 5 solo ejecuta la instrucción:
Te retornará toda la información del producto y se verá algo parecido a esta imagen:

Puedes ver que se muestra la columna category_id que está relacionada al id de la tabla categories, para ver el nombre de la categoría a la que pertenece este producto ejecuta la instrucción:
Aquí puedes ver que las tablas están relacionadas correctamente. Ahora para probar las categorías primero tienes que declarar el Modelo que quieres usar:
Si quieres ver todas las categorías que están guardadas en la tabla solo ejecuta la instrucción de Eloquent:
Para consultar una categoría en específico solo agrega a la consulta el id:
Y ahora puedes consultar todos los productos que están relacionados a esta categoría para ello usa el método products, ejecuta:
Las relaciones de las tablas a nivel base de datos y a nivel Modelos están funcionando correctamente.
Labore dolor amet ipsum ea, erat sit ipsum duo eos. Volup amet ea dolor et magna dolor, elitr rebum duo est sed diam elitr. Stet elitr stet diam duo eos rebum ipsum diam ipsum elitr.
123 Street, New York, USA
info@example.com
+012 345 67890
©
Your Site Name.
All Rights Reserved.
Designed by
HTML Codex
Distributed By:
ThemeWagon