2014-03-18 89 views
3

我在具有這種結構獲取與角色的所有用戶在Laravel

用戶這個Laravel項目的工作:ID | first_name | ...

角色:id |名稱

assigned_roles:id | user_id | ROLE_ID

我覺得這是很明顯的:對

用戶模式

class User extends ConfideUser { 
use HasRole; 

public function Roles(){ 
    return $this->belongsToMany('Role','assigned_roles'); 
} 

榜樣

class Role extends EntrustRole 
{ 
public function Users() 
{ 
    return $this->belongsToMany('User','assigned_roles'); 
} 


} 

我正在尋找一種方式來獲得所有用戶在這種情況下指定的角色是'教師'。我試過這個:

$students = User::with(array('Roles' => function($query) { 
     $query->where('name','Teacher'); 
    })) 
    ->get(); 
    return $students; 

但這總是返回一個所有用戶的數組。

有人會知道爲什麼這樣嗎? 謝謝!

回答

13

你當前在你$students查詢,詢問laravel的,是「給我所有的學生,併爲每一個學生讓我所有的角色,如果角色是老師」

嘗試使用whereHas

$students = User::whereHas(
    'roles', function($q){ 
     $q->where('name', 'Teacher'); 
    } 
)->get(); 

這應該讓你的用戶,但只有他們有一個角色,其中名稱是老師。

+1

它解決了問題:) – Qazi

+0

仍然在laravel 5.4 – danny

相關問題