我在laravel中很难建立起非常嵌套的关系。
所需的行为如下,
我通过ID选择一个事件,我想查看哪些人已订阅该事件。 现在的问题是事件和人员之间有一些表格。
这是有效的查询!
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中实现这种嵌套关系链接如此困难吗?
谢谢!
return Event::with('city.companies.persons')->get();
如果只想从persons表中选择某些字段,请使用以下命令:
persons
return Event::with(['city.companies.persons' => function ($query) { $query->select('id', '...'); }])->get();