У меня есть несколько таблиц.
Экскурсионный стол
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
, inclusion.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);
}
Я знаю, что это можно сделать с помощью циклов и условных операторов, когда нам нужно запрашивать базу данных несколько раз, но я хочу добиться этого с помощью `нетерпеливой загрузки с Eloquent в 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();