我想告訴誰擁有「經理人」Laravel SQL查詢3日關係
的權限名稱的所有用戶,我有以下數據庫
用戶(很多與角色一對多的關係)| ID:整數
ROLE_USER(透視表)| ROLE_ID:INT USER_ID:整數
角色(多對多的關係與用戶和擁有衆多關係 有權限)| ID:整數
權限(屬於角色)| id:int name:string
有人可以請指出我如何撰寫查詢的正確方向,我使用laravel 5.2,但對原始sql很滿意。
我想告訴誰擁有「經理人」Laravel SQL查詢3日關係
的權限名稱的所有用戶,我有以下數據庫
用戶(很多與角色一對多的關係)| ID:整數
ROLE_USER(透視表)| ROLE_ID:INT USER_ID:整數
角色(多對多的關係與用戶和擁有衆多關係 有權限)| ID:整數
權限(屬於角色)| id:int name:string
有人可以請指出我如何撰寫查詢的正確方向,我使用laravel 5.2,但對原始sql很滿意。
原始的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
Eloquent's query builder offers whereHas()方法允許在相關模型的屬性上進行過濾。它支持嵌套的關係爲好,所以下面應該做的伎倆:
$managers = User::whereHas('roles.permissions', function($query) {
$query->where('name', '=', 'Manager');
})->get();
完美,我重新編碼,使其更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