2016-09-04 84 views
3

我想告訴誰擁有「經理人」Laravel SQL查詢3日關係

的權限名稱的所有用戶,我有以下數據庫

用戶(很多與角色一對多的關係)| ID:整數

ROLE_USER(透視表)| ROLE_ID:INT USER_ID:整數

角色(多對多的關係與用戶和擁有衆多關係 有權限)| ID:整數

權限(屬於角色)| id:int name:string

有人可以請指出我如何撰寫查詢的正確方向,我使用laravel 5.2,但對原始sql很滿意。

回答

2

原始的SQL看起來像:

select * from users 
inner join role_user on users.id=role_user.user_id 
inner join roles on role_user.role_id=roles.id 
inner join permissions on roles.id=permissions.role_id 
where permissions.name='Manager' 
group by users.id 
+0

完美,我重新編碼,使其更laravel $ managerUsers = DB: :表( '用戶') - >加入( 'ROLE_USER', 'users.id', '=', 'role_user.user_id') - >加入( '角色', 'role_user.role_id', '=' 'roles.id') - >加入( '許可', 'roles.id', '=', 'permissions.role_id') - >其中( 'permissions.name', '=', '管理器' ) - > get(); – LeeJ

1

Eloquent's query builder offers whereHas()方法允許在相關模型的屬性上進行過濾。它支持嵌套的關係爲好,所以下面應該做的伎倆:

$managers = User::whereHas('roles.permissions', function($query) { 
    $query->where('name', '=', 'Manager'); 
})->get();