Skip to content

Relaciones de Clases

Alberto edited this page Jan 13, 2018 · 4 revisions

Muchos a muchos

Para esta relación se ha decidido crear una tabla auxiliar, la cuál posee 2 claves ajenas que apuntan a la clave primaria de las cada tabla a la qué se hace referencia.

Por tanto, la migración tendrá la siguiente estructura:

Nombre de tabla: 'tabla1_tabla2'

$table->integer('tabla1_id')->unsigned()->nullable();
$table->foreign('tabla1_id')->references('id')->on('tabla1')->onDelete('cascade');

$table->integer('tabla2_id')->unsigned()->nullable();
$table->foreign('tabla2_id')->references('id')->on('tabla2')->onDelete('cascade');

Al eliminar la fila de la tabla 1 o 2 se borrará automáticamente en cascada las relaciones que posea.

Al ser una relación muchos a muchos, hay que añadir una variable en el modelo que relacione ambas tablas, para ello, se deberá añadir en el modelo las siguientes líneas:

// Modelo tabla1
public function tabla2(){
   return $this->belongsToMany('App\Models\Tabla2', 'tabla1_tabla2');
}

Por tanto, a la hora de cargar el usuario en el controlador, al haberlo hecho global (user = tabla1):

//File: /app/Http/Controllers/Controller.php
$this->user = User::find(Auth::user()->id);

Se podrán acceder a sus corriespondientes relaciones con tabla2 (tabla2 = cursos) desde cualquier vista.

$user->cursos

Uno a muchos

Para realizar esta relación, al igual que en la relación muchos a muchos, se debe implentar en la migración:

Nombre de tabla: 'tabla1'

$table->integer('tabla2_id')->unsigned();
$table->foreign('tabla2_id')->references('id')->on('tabla2')->onDelete('cascade');

Además, se añade la clave ajena que apunte a la otra tabla indicando que se borre si es borrado la fila de tabla2.

Además en los modelos se debe añadir:

Modelo1:

public function datoTabla2(){
        return $this->belongsTo('App\Models\ModeloTabla2');
}

Modelo2:

public function datosTabla1(){
        return $this->hasMany('App\Models\ModeloTabla1');
}

Clone this wiki locally