我想定义一个相当独特的关系,但似乎找不到这个关系的名称。
我的数据库结构如下:
user
,在本例中填充了不相关的数据- 具有
user_organisation.user_id
和user_organisation.organisation_id
的user_organisation
表 organisation
,填充了与本例无关的数据- 包含
event.organisation_id
密钥的event
我想定义关系user
->events
。或者换句话说:用户所在组织中的所有事件。
在您的用户模型中:
public function organisations() {
return $this->belongsToMany(Organisation::model, 'user_organisation');
}
在您的组织模式中:
public function users() {
return $this->belongsToMany(User::model, 'user_organisation');
}
public function events() {
return $this->hasMany(Event::model);
}
在您的事件模型中:
public function organisation() {
return $this->belongsTo(Organisation::model);
}
然后:
$user = User::find(1);
$organisations = $user->organisations;
foreach($organisations as $organisation) {
$user_organisation_events = $organisation->events;
}
或者在您的用户模型中:
public function getAllEvents() {
$events = new Collection();
$organisations = $this->organisations;
foreach($organisations as $organisation) {
$events[] = $organisation->events();
}
return $events;
}
因此$user->getAllEvents((应返回与其关联的所有组织的所有事件的集合。
编辑:
如果你想返回一个有说服力的对象而不是一个集合,你也可以添加一个看起来像这样的方法:
public function events() {
$organisations = $this->organisations;
return Event::query()->whereHas('organisations', function ($query) {
$query->where('organisation_id', $organisations->pluck('organisation_id'));
});
}