馃寪 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