У меня много проблем с установлением очень вложенных отношений для правильной работы в 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 так сложно добиться такого рода вложенных отношений?
Спасибо!