🌐 Relaciones muchos a muchos en Eloquent
En Laravel, una relación muchos a muchos se utiliza cuando múltiples registros de una tabla pueden estar asociados con múltiples registros de otra. Por ejemplo, un estudiante puede estar inscrito en varios cursos, y un curso puede tener muchos estudiantes.
🧩 1️⃣ Creación de las tablas
Para definir una relación muchos a muchos, se necesita una tabla intermedia (también llamada
tabla pivote).
Veamos un ejemplo práctico con estudiantes y cursos.
php artisan make:model Estudiante -m
php artisan make:model Curso -m
En las migraciones generadas, definimos las estructuras:
// database/migrations/xxxx_create_estudiantes_table.php
Schema::create('estudiantes', function (Blueprint $table) {
$table->id();
$table->string('nombre');
$table->string('email')->unique();
$table->timestamps();
});
// database/migrations/xxxx_create_cursos_table.php
Schema::create('cursos', function (Blueprint $table) {
$table->id();
$table->string('titulo');
$table->string('descripcion')->nullable();
$table->timestamps();
});
Y ahora creamos la tabla pivote:
php artisan make:migration create_curso_estudiante_table --create=curso_estudiante
Definimos su contenido:
Schema::create('curso_estudiante', function (Blueprint $table) {
$table->id();
$table->foreignId('curso_id')->constrained()->onDelete('cascade');
$table->foreignId('estudiante_id')->constrained()->onDelete('cascade');
$table->timestamps();
});
🔗 2️⃣ Definir la relación en los modelos
En el modelo Estudiante:
class Estudiante extends Model
{
public function cursos()
{
return $this->belongsToMany(Curso::class);
}
}
Y en el modelo Curso:
class Curso extends Model
{
public function estudiantes()
{
return $this->belongsToMany(Estudiante::class);
}
}
🧠 3️⃣ Insertar y obtener datos
Para asociar un estudiante a un curso, usamos el método attach():
$estudiante = Estudiante::find(1);
$estudiante->cursos()->attach(2); // Inscribir al curso con ID 2
Para eliminar una relación:
$estudiante->cursos()->detach(2); // Eliminar la inscripción
Y para sincronizar relaciones (elimina las no incluidas):
$estudiante->cursos()->sync([1, 3, 5]); // Asigna solo esos cursos
Para acceder a los cursos de un estudiante:
foreach ($estudiante->cursos as $curso) {
echo $curso->titulo;
}
✅ Conclusión
- 🌐 Las relaciones muchos a muchos usan una tabla pivote para conectar ambas entidades.
- 🔗 Se definen en los modelos con
belongsToMany(). - 📚 Métodos como
attach(),detach()ysync()permiten gestionar las asociaciones fácilmente. - 💡 Eloquent simplifica el manejo de relaciones complejas sin escribir SQL manualmente.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias