2014-10-03 45 views
3

我有3個表格;用戶,組和權限雄辯多對多 - 如何輕鬆加載遠處的關係

在模型中我有關係,因爲belongsToMany 在用戶模式設置:

public function groups() { 
    return $this->belongsToMany('Group'); 
} 

在組模型:

public function users() { 
    return $this->belongsToMany('User'); 
} 

public function permissions() { 
    return $this->belongsToMany('Permission'); 
} 

在權限模型:

public function groups() { 
    return $this->belongsToMany('Group', 'id'); 
} 

許多用戶對多組 m任何組對多的權限

我試圖獲得用戶擁有的所有權限,並且不知道它的代碼應該是什麼樣子。誰能幫忙?

回答

13

這是你如何做到這一點:

User::where('id', $id)->with(['groups.permissions' => function ($q) use (&$permissions) { 
    $permissions = $q->get()->unique(); 
}])->first(); 

// then 
$permissions; // collection of unique permissions of the user with id = $id 
+0

仍然不知道如何,但它確實有效。需要深入閱讀文檔。 – 2014-10-03 22:45:13

+1

超級聰明我的朋友 – lagbox 2014-10-06 05:27:28

+0

@PawelBieszczad你不會在文檔中找到它。這只是獲得你所需要的一個技巧。缺點是它會運行1個額外的查詢來獲取它,但是它比在相關集合中循環更容易,並且即使對於更深層的嵌套關係也是如此。 – 2014-10-06 05:54:20

0

它應該是這個樣子,如果你渴望載入中...

$user = User::where('id', $id)->with(['groups.permissions'])->first(); 
+0

以及如何將我得到的權限? $ q = User :: where('id',$ id) - > with(['groups.permissions']) - > first(); dd($ q-> permission); 沒有顯示任何東西 – 2014-10-03 21:34:34

+0

'$ q-> groups [$ index] - > permissions' – Rob 2014-10-03 21:38:29

+0

我試圖避免循環,就像查詢獲得數組或集合中的所有權限 – 2014-10-03 21:42:24