У меня несколько таблиц.
Туристический стол
id | title | slug .....
Таблица изображений
id | tour_id | image.....
Таблица включения
id | tour_id | inclusion....
Таблица исключений
id | tour_id | exclusion...
Стол
id | tour_id | day_summary.....
Таблица Tour_User (This is a pivot table between tour table and user table)
tour_id | user_id
Мне нужно
Я хочу получить информацию о туре с image, inclusion, exclusion, itenary, tour user
где image.tour_id
равно tour.id
и tour.id
равно tour.id
и exclusion.tour_id
равно tour.id
и т. Д.
Я определил отношения в Tour Model
как
public function user() { return $this->hasOne(TourUser::class); } public function image() { return $this->hasMany(TourImage::class); } public function inclusion() { return $this->hasMany(TourInclusion::class); } public function exclusion() { return $this->hasMany(TourExclusion::class); } public function highlight() { return $this->hasMany(TourHighlight::class); } public function itenary() { return $this->hasMany(TourItenary::class); }
Я знаю, что это можно сделать с помощью циклов и условных операторов, где нам нужно запрашивать базу данных несколько раз, но я хочу достичь ее с «жадной загрузкой с красноречивым в Laravel 5.4». Как я могу ее достичь. https://stackoverflow.com/a/21380265/4807414 похоже, что у него есть немного схожая проблема, но она не может решить.
Я попробовал что-то вроде:
$tour = Tour::where('slug', $slug) ->with('user', 'image', 'itenary', 'inclusion', 'exclusion') ->whereHas('user', function($query) { $query->where('user_id', user()->id); }) <-- user() defind in helper function for logged in user detail ->whereHas('itenary', function($query) { $query->where('tour_id', '21'); }) <-- pass tour id ->whereHas('inclusion', function($query) { $query->where('tour_id', '21'); }) <-- pass tour id ->first();