2016-06-30 295 views
2

有4个表:用户,所有者,组,要求- Laravel雄辩

有业主和请求之间没有直接关系,我正在寻找一种方式来做些什么像这样:$ onwer-> requests,以获得与所有者相关的所有请求。

这里是事情是如何工作的:

每个用户都是在一组,每个组由所有者拥有,请求将用户创建和每个请求是一组(一个内有关/)。

表是这样的:
业主:ID,用户名
组:ID,姓名,owner_id,一年 用户:ID,用户名
GROUP_USER:ID,GROUP_ID邀请,USER_ID
要求:身份证, group_id,user_id,desc

创建所有者和组之间,或者请求和用户之间的关系很容易,但我怎样才能向所有者获取所有相关请求?另一件事是,我应该能够得到属于一个所有者的所有请求,这些请求属于组,其中声明像年=某事

现在我在做一些愚蠢的事是这样的:

有一个组,并请求之间一对多的关系,这样我就可以得到一组的所有请求。(组的hasMany要求)

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

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

您可能正在寻找'hasManyThrough'。你可以'返回$ this-> hasManyThrough(\ App \ Request :: class,\ App \ Group :: class);'。这种说法是“我是所有者类,通过组实体有很多请求”。由于你的'group'已经拥有'owner_id',并且你的请求有'group_id',它应该可以工作。 –

+0

是的,它完成了这项工作。谢谢。我真的不知道为什么我从来没有读过laravel文档中的*有很多通过*部分。 – Ravexina

回答

1

给其他人寻找同样的东西,这背后的概念是由LaravelhasManyThrough

在这种情况下,我们必须在所有者的类模型

public function requests() { 
    return $this->hasManyThrough(\App\Request::Class, \App\Group::Class); 
} 

这里的逻辑是,Owner有很多Requests(第一个参数)的下面的函数通过Group类(第二参数)。