Я использую следующую структуру базы данных:
кино
— Я бы
— заглавие
директор
— Я бы
— название
режиссер
— director_id
— movie_id
Модели настроены так:
Movie.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');
}
}
Таким образом, между фильмом и режиссером существует отношение многих ко многим.
На странице с подробностями фильма я хотел бы опубликовать другие фильмы режиссеров оригинального фильма.
$movie = Movie::with('directors.movies')->find(1);
Это дает мне все данные, которые мне нужны, но чтобы получить полный список фильмов, мне нужно было бы просмотреть коллекцию режиссеров, а затем просмотреть коллекцию фильмов внутри этого режиссера. Нет ли более быстрого / простого способа сделать это?
Я думаю, что один из способов сделать это будет добавить метод к вашему Movie
модель с использованием hasManyThrough
чтобы получить другие фильмы, связанные режиссером.
public function relatedMovies()
{
return $this->hasManyThrough('App\Movie', 'App\Director');
}
Затем отдельно стремитесь загрузить эти отношения, а не загружать вложенные отношения.
$movie = Movie::with('directors', 'relatedMovies')->find(1);
Других решений пока нет …