Relaciones laravel

Después de haber creado los modelos y migraciones, hay que definir las relaciones entre modelos. Para ello hay que indicar qué tipo de relación hay entre cada modelo creado.

Índice
  1. Relación uno a uno
  2. Relación uno a muchos
  3. Relación muchos a muchos
  4. Relación uno a muchos a través de otra tabla intermedia
  5. Resumen de código

Relación uno a uno

También llamada relación 1:1, y relación 1:1 inversa, donde un registro de una tabla solo tiene un registro en la otra tabla.

  • Modelo1: (Relacion 1:1) se inserta el código con la función hasOne referente al otro modelo2.

public function modelo2(){
return $this->hasOne('App\Models\Modelo2');
}

  • Modelo2: (relación 1:1 inversa) se inserta el código con la función belongsTo referente al otro modelo1.

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

Relación uno a muchos

También llamada relación 1:n y relación 1:n inversa, donde un registro de una tabla tiene uno o muchos registros en la otra tabla

  • Modelo1: (Relación 1:n) se inserta el código con el método hasMany referente al otro modelo 2

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

  • Modelo2: (Relación 1:n inversa) se inserta el código con el método belongsTo referente al otro modelo1.
    Se puede especificar también la clave primaria, indicándo cuál es en segundo parámetro. Esto es útil si en nombre de la función es distinto al de la convención.

public function Modelo1(){
return $this->belongsTo('App\Models\ Modelo1 ', 'Modelo1_id');
}

Relación muchos a muchos

También llamada relación n:n, donde muchos registros de una tabla tiene muchos registros en la otra tabla.

  • Modelo1: (Relación n:n) se utiliza el método belognsToMany en referencia al otro modelo 2

public function Metodo2(){
return $this->belognsToMany('App\Models\Metodo2 ');
}

  • Modelo2: (Relación n:n inversa) se utiliza el método belognsToMany en referencia al otro modelo1

public function Modelo1(){
return $this->belongsToMany('App\Models\Modelo1');
}

Relación uno a muchos a través de otra tabla intermedia

Esta relación uno a muchos enlaza a dos tablas a través de otra intermedia y se llama relación Has Many Through.

Por ejemplo: Una base de datos que contiene cursos, secciones y lecciones.

Un Curso (tabla1) tiene una o muchas secciones (tabla2) (1:n).
Y una sección tienen una o muchas lecciones (tabla3) (1:n).
Entonces se puede relacionar a un curso con las lecciones a través de la sección (tabla1 -> tabla3).

  • Modelo1: (Relacion 1:n) se inserta el código con la función hasManyThrough referente a los modelo2 y modelo3.
    Definir nombre de la función en plurar, ya que son muchos.
    Se pasan dos parámetros:
    1- El tipo del modelo de la tabla final (modelo3).
    2- El tipo del modelo de la tabla intermedia (modelo2).

class Modelo1 extends Model{
...
public function Modelo3(){
return $this->hasManyThrough('App\Models\Modelo3', ' App\Models\Modelo2 ');
}

Una imagen de ejemplo de la realción hasManyThrough
relacion hasManyThrough

Resumen de código

Estas son las principales relaciones:

  • hasOne('App\Models\Modelo2') - relacion uno a uno (1:1)
  • belongsTo('App\Models\modelo1'); - relacion uno a uno inversa (1:1)
  • hasMany('App\Models\Modelo2'); - relación uno a muchos (1:n)
  • belongsTo('App\Models\ Modelo1 ', 'Modelo1_id'); - relacion uno a muchos inversa (1:n)
  • belognsToMany('App\Models\Metodo2 '); - relacion muchos a muchos (n:n)
  • belognsToMany('App\Models\Metodo1 '); - relacion muchos a muchos inversa (n:n)
  • hasManyThrough(('App\Models\Modelo3' , 'App\Models\Modelo2'); - relacion uno a mucho a través de (1:n)

También es interesante ver las realciones polimórficas en Laravel.

Espero te sirva de utilidad.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir