Para este tutorial se usará de ejemplo un sistema que gestiona alumnos en una escuela, este sistema cuenta con dos modelos, Estudiante y Curso en donde un estudiante puede tener muchos cursos y un curso puede contar con muchos estudiantes. En este ejemplo aplica la relación de «muchos a muchos». En los siguientes pasos verás cómo implementar las relaciones «muchos a muchos» (Many to Many) en Laravel:
Cuando trabajas con relaciones de muchos a muchos es necesario crear una tabla intermedia o pivote la cual relaciona el id del modelo Estudiante y el id del modelo Curso. Primero crea el modelo Estudiante y su migración, para ello abre una terminal de comandos en la raíz de tu proyecto en Laravel y ejecuta la instrucción:
Para crear el modelo Curso y su migración:
Ahora para crear la tabla intermedia o tabla pivote recuerda que debe ser llamada como los modelos y en orden alfabético en este caso se llama curso_estudiante ya que curso es primero alfabéticamente que estudiante y siempre en singular. Ejecuta el siguiente comando:
Con el editor de textos de tu preferencia abre el archivo database/migrations/…create_estudiantes_table.php y agrega el campo ‘name’ y ‘first_name’ para que quede así:
Toca configurar el archivo database/migrations/…create_cursos_table.php al cual para este ejemplo solo le agregarás el campo ‘name’:
Ahora abre el archivo database/migrations/…create_curso_estudiante_table.php que es la tabla intermedia en donde se crearán las relaciones con las tablas cursos y estudiantes:
En el anterior código el método unsignedBigInteger() asigna al campo curso_id un tipo de dato entero, positivo y soporta un valor muy grande. El método foreign() define la llave foránea y la relación entre los campos curso_id de la tabla curso_estudiante y el campo id de la tabla cursos.
Toca crear las relaciones entre Estudiante y Curso a nivel de modelo, para ello abre el archivo app/Models/Estudiante.php y como un estudiante puede tener muchos cursos se usa el método en plural y se utiliza belongsToMany(). Agrega la función estudiantes() al archivo:
Para terminar de crear la relación a nivel modelo abre el archivo app/Models/Curso.php y como un curso puede pertenecer a muchos estudiantes el nombre del método debe estar en plural y al igual que el método anterior se usa belongsToMany():
Para generar datos falsos de prueba voy a usar Factories para poblar las tablas de la base de datos, para crear el factory para el modelo Estudiante ejecuta la siguiente instrucción en la consola de comandos:
Ahora para crear el factory para el modelo Curso:
Abre el archivo database/factories/EstudianteFactory.php y para agregar información falsa de prueba vas utilizar la librería Faker de Laravel para lo cual pega el siguiente código en tu archivo:
En el archivo database/factories/CursoFactory.php dentro del método definition() en el array return agrega la siguiente línea de código para generar los nombres falsos para los cursos:
Abre el archivo database/seeders/DatabaseSeeder.php y al inicio importa los modelos Estudiante y Curso:
El siguiente código es un factory que crea datos falsos de prueba haciendo uso de las relaciones «muchos a muchos» (Many to Many) en Laravel, crea 15 estudiantes, 8 cursos y cada curso es tomado 3 estudiantes con los cuales son relacionados en la tabla intermedia. Dentro del método run() agrega las siguiente líneas de código:
Para correr las migraciones y poblar las tablas ejecuta la siguiente instrucción:
Abre tu cliente de gestión de base de datos como PHPMyAdmin, Heidi o MySQLWorkbench y verás que las tablas estudiantes y cursos se han poblado de datos y en la tabla intermedia o pivote están las relaciones de cursos y estudiantes a través de su id.
Laravel como el gran marco de desarrollo que es cuenta con un buen número de herramientas que facilitan el trabajo y Tinker es una de ellas. Con Tinker harás consultas desde la terminal de comandos para probar las relaciones en la base de datos y modelos, para llamar a Tinker ejecuta la instrucción:
Para consultar todos los registros de los estudiantes escribe:
Si quieres ver todos los cursos que se han registrado en la base de datos ejecuta la instrucción:
Ahora consulta un estudiante en específico como el que tiene el id 11:
Consulta los cursos a los que el estudiante de id 11 está inscrito ejecutando:
Para ver los estudiantes que están inscritos en un curso específico:
Accediendo a través de la relación muchos a muchos:
Se muestran todos los estudiantes que pertenecen a este curso. Las relaciones de las tablas están funcionando correctamente a nivel base de datos y a nivel modelos.
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