Laravel 嵌套关系 [英] Laravel nested relationships
本文介绍了Laravel 嵌套关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我无法在 laravel 中建立一个非常嵌套的关系以正常工作.
I'm having trouble getting a very-nested relationship to work correctly in laravel.
想要的行为如下,
我通过 ID 选择一个事件,我想查看哪些人订阅了它.现在的问题是事件和人之间有一些表格..
I select an event by ID and i want to see which persons are subscribed to it. Now the problem is there are some tables between the event and the person..
这是有效的查询!
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中实现这种嵌套关系链接有那么难吗?
And many other possibilities, I'm really stuck on this. Is it so difficult in laravel to achieve this kind of nested relationship linking?
谢谢!
推荐答案
return Event::with('city.companies.persons')->get();
如果您只想从 persons
表中选择某些字段,请使用:
If you only want to select certain fields from the persons
table, use this:
return Event::with(['city.companies.persons' => function ($query) {
$query->select('id', '...');
}])->get();
这篇关于Laravel 嵌套关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文