【发布时间】:2019-06-17 06:59:17
【问题描述】:
我有以下表格,并且想用一个条件进行左连接,并从左连接表中进行另一个内连接,
用户表
编号 |姓名 1 约翰 2山姆 3 塞西尔角色表
编号 |姓名 1 名管理员 2 编辑model_has_roles 表
角色 ID |型号类型 | model_id 1 应用\用户 1 2 应用\用户 2我想要什么
如果 model_type 是 'App\User',则在 user.id 和 model_has_roles.model_id 列上对 user 表和 model_has_roles 表进行左连接,然后在 Roles 表和 model_has_roles 表之间进行另一个内连接role_id 和 Roles.id 列。所以结果应该是这样的,
编号 |姓名 |角色 1 约翰 管理员 2山姆编辑 3 塞西尔 -我尝试了以下查询但无法正常工作,
DB::table('users')->select('id', 'name', 'email', 'created_at', 'role_id')
->leftJoin('model_has_roles', 'model_has_roles.model_id', '=', 'users.id')
->where('model_has_roles.model_type', '=', 'App\User')
->paginate(1);
如果你能帮我写一个雄辩的查询。
谢谢
P.S:实际上,我正在使用 spatie/laravel-permission,并试图获取所有用户的角色名称。
【问题讨论】:
-
为什么不使用它们的内置函数,如
$user->getPermissionsViaRoles();? -
如果我有 50 个用户并且想在列出所有用户时调用此方法 50 次会发生什么?会不会导致性能下降?我就是这么想的