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.
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\M
etodo2
');}
- 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
referente a los modelo2 y modelo3.hasManyThrough
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\Modelo
3', ' App\Models\
');Modelo
2
}
Una imagen de ejemplo de la realción 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