Estoy usando la siguiente estructura de base de datos:
película
- identificación
- título
director
- identificación
- nombre
director de cine
- id_director - id_película
Los modelos se configuran así:
Película.php
namespace App; use Illuminate\Database\Eloquent\Model; class Movie extends Model { public $table = "movie"; /** * The roles that belong to the user. */ public function directors() { return $this->belongsToMany('App\Director', 'movie_director'); } }Director.php
namespace App; use Illuminate\Database\Eloquent\Model; class Director extends Model { public $table = "director"; /** * The roles that belong to the user. */ public function movies() { return $this->belongsToMany('App\Movie', 'movie_director'); } }Así que hay una relación de muchos a muchos entre una película y un director.
En la página de detalles de una película me gustaría publicar otras películas de los directores de la película original.
$movie = Movie::with('directors.movies')->find(1);Eso me da todos los datos que necesito, pero para obtener una lista completa de películas, tendría que recorrer la colección de directores y luego recorrer la colección de películas dentro de ese director. ¿No hay una manera más rápida/más fácil de hacer esto?
Creo que una forma de hacer esto sería agregar un método a su modelo de Movie usando hasManyThrough para obtener las otras películas relacionadas por director.
public function relatedMovies() { return $this->hasManyThrough('App\Movie', 'App\Director'); }Luego, cargue esa relación por separado, en lugar de cargar ansioso la relación anidada.
$movie = Movie::with('directors', 'relatedMovies')->find(1);