Вложенные отношения Laravel

У меня много проблем с тем, чтобы получить очень-вложенные отношения, чтобы правильно работать в laravel.

Желаемое поведение выглядит следующим образом:

Я выбираю событие по идентификатору, и я хочу посмотреть, кто из них подписался на него. Теперь проблема в том, что между событием и человеком есть несколько таблиц.

Это запрос, который работает!

select persons.id, persons.firstname, persons.lastname, event_scores.score from events join cities on cities.id = events.city_id join companies on cities.id = companies.city_id join persons on companies.id = persons.company_id join event_scores on event_scores.person_id = persons.id where event_scores.event_id = 1 group by persons.id 

Это мои отношения

Модель события

 class Event extends Eloquent { protected $table = 'events'; public function city() { return $this->belongsTo('City'); } } 

Модель города

 class City extends Eloquent { protected $table = 'cities'; public function companies() { return $this->hasMany('Company'); } public function event() { return $this->hasMany('Event'); } } 

Модель компании

 class Company extends Eloquent { protected $table = 'companies'; public function persons() { return $this->hasMany('Person'); } public function city() { return $this->belongsTo('City'); } } 

Модель персонажа

 class Person extends Eloquent { protected $table = 'persons'; public function company() { return $this->belongsTo('Company'); } public function eventscore() { return $this->belongsToMany('Event', 'event_scores', 'person_id', 'event_id') ->withPivot('score') ->withTimestamps(); } } 

Что я пробовал

 return Event::with('city')->with('company')->get(); 

а также

 return Event::with('city') ->whereHas('companies', function($query) use ($company_id){ $query->where('company_id', $company_id); })->get(); 

И многие другие возможности, я действительно застрял на этом. Неужели так трудно в laravel достичь такого отношения вложенных отношений?

Благодаря!

Related of "Вложенные отношения Laravel"

 return Event::with('city.companies.persons')->get(); 

Если вы хотите только выбрать определенные поля из таблицы persons , используйте следующее:

 return Event::with(['city.companies.persons' => function ($query) { $query->select('id', '...'); }])->get(); 

Для конкретных городов и компаний вам необходимо распределить их с красноречивым. Например:

 return Event::with([ 'city' => function ($query) { $query->select('id', '...'); }, 'city.companies' => function ($query) { $query->select('id', '...'); }, 'city.companies.persons' => function ($query) { $query->select('id', '...'); } ])->get();