拉拉韦的关系有三个方面



我想定义一个相当独特的关系,但似乎找不到这个关系的名称。

我的数据库结构如下:

  • user,在本例中填充了不相关的数据
  • 具有user_organisation.user_iduser_organisation.organisation_iduser_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'));
}); 
}

相关内容

  • 没有找到相关文章

最新更新