不直接相关的表之间的关系 - Laravel Eloquent

时间:2016-06-30 17:15:41

标签: php laravel eloquent

共有4个表:用户,所有者,群组,请求

所有者和请求之间没有直接关系,我正在寻找一种方法来执行以下操作:$ onwer->请求,以获取与所有者相关的所有请求

以下是工作原理:

每个用户都在一个组中,每个组都由一个所有者拥有,请求将由用户创建,每个请求都是针对一个(与一个内部相关的)组。

表格是这样的:
所有者:id,用户名
groups:id,name,owner_id,year 用户:id,用户名
group_user:id,group_id,user_id
请求:id,group_id,user_id,desc

在所有者和群组之间,或在请求和用户之间创建关系很容易,但我如何才能向所有者提供所有相关请求?另一件事是,我应该能够将所有请求归属于拥有年度语句的组中的所有者,例如年=某事

现在我做这样的蠢事:

组和请求之间存在一对多的关系,因此我可以从组中获取所有请求。 (group hasMany request)

$groups = Group::where('owner_id', $owner_id)->get();

foreach($groups as $group)
   foreach($group->requests as $request)
      if($request->year == 2016)
          $requests[] = $request;

1 个答案:

答案 0 :(得分:1)

对于其他寻找相同内容的人来说,其背后的概念被 Laravel 称为hasManyThrough

在这种情况下,我们将在所有者的班级模型

中拥有以下功能
public function requests() {
    return $this->hasManyThrough(\App\Request::Class, \App\Group::Class);
}

这里的逻辑是Owner有很多Requests(第一个参数) Group类(第二个参数)。