【发布时间】:2015-11-14 08:05:47
【问题描述】:
假设你有
Facility 1------* Section 1------* Session *------1 Event
即,一个设施有很多部分;每个部分可以举行多场会议;每个会话都属于一个事件。
如何将其定义为Facility 模型中的关系,以检索设施托管的Event 的所有唯一 实例?我试过这个:
class Facility extends Eloquent\Model {
public function events() {
return $this->hasMany('Event')
->join('session', 'session.event_id', '=', 'event.id')
->join('section', 'section.id', '=', 'session.section_id')
->join('facility', 'facility.id', '=', 'section.facility_id');
}
}
我不知道我是否非常接近; Laravel 隐式添加了一个约束 ("events"."facility_id" in (...)),一切都搞砸了。
这样做的正确方法是什么?
【问题讨论】:
-
来自 laravel 5.1 文档:Has Many Through “has-many-through”关系为通过中间关系访问远距离关系提供了便捷的捷径。例如,一个 Country 模型可能通过一个中间 User 模型有许多 Post 模型。在此示例中,您可以轻松收集给定国家/地区的所有博客文章。 laravel docs
-
我已经尝试过了,但在这种情况下,中间有两个关系。事实上,我已经实现了
hasManyThrough来获取会话。 -
很遗憾,
hasManyThrough只有 2 个级别。您必须为每个模型定义关系并执行此操作$events= Facility::with('sections.sessions.event')->get();
标签: sql laravel laravel-5 relationships