2016-06-30 294 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類(第二參數)。