2016-07-14 96 views
0

基本上我只想轉儲所有具有特定角色的用戶。當我這樣做:Laravel 5.2獲得角色所有用戶(Entrust)

$users = User::with('roles')->get(); 

我讓所有的用戶和角色的用戶添加的,像這樣:

{ 
id: 1, 
first_name: "P", 
last_name: "Tag", 
email: "[email protected]", 
phone: "5555555555", 
avatar: "", 
last_login: "2016-07-13 23:49:23", 
created_at: "2016-07-13 23:25:05", 
updated_at: "2016-07-13 23:49:23", 
roles: [ 
    { 
    id: 1, 
    name: "owner", 
    display_name: "Admin", 
    description: "Admin user that has full access", 
    created_at: "2016-06-07 00:00:00", 
    updated_at: "2016-06-07 00:00:00", 
    pivot: { 
     user_id: 1, 
     role_id: 1 
    } 
    } 
] 
}, 

大,現在我只想有一定價值的角色名來獲取用戶。我想我的查詢看起來像這樣,但不知道如何寫它:

$users = User::with('roles')->where('roles->name', '=', 'owner')->get(); 

但這當然不起作用。

回答

2

所以這是我做過什麼來得到它的工作。對於有問題的人來看看Laravel雄辯關係文檔,那是我解決問題的地方。

$users = User::whereHas('roles', function ($query) { 
      $query->where('name', '=', 'owner'); 
})->get(); 
0

可以爲預先加載這樣的查詢指定其他查詢約束:

$users = User::with(['roles' => function ($query) { 
    $query->where('name', '=', 'owner'); 
}])->get(); 

更新:如果要指定其他查詢約束用戶的表,你可以把它們連這樣的:

$users = User::with(['roles' => function ($query) { 
    $query->where('name', '=', 'owner'); 
}])->where('role_id', '<>', null)->->get(); 

注意:不確定是否role_id或數據庫中的內容如此以便說明。

+0

嗯,我得到這是什麼是應該做的,但現在它返回的所有用戶,只要那些角色是業主有附加到JSON,那些誰不仍然名單,但沒有作用。 – Packy

+0

所以你想查詢用戶表,而不是急於加載的查詢!好的,看到更新的答案 – ClearBoth

+0

嘿,沒有嘗試過你的答案,但我知道了。如果你願意,你可以查看我的答案。乾杯。 – Packy

0

使用您的查詢是這樣的: -

$users = App\User::with(['roles' => function ($query) { 
    $query->where('name', 'owner'); 
}])->get(); 
+0

與@clearboth相同 – Packy

相關問題