如何使用左连接和内连接编写 laravel 查询?
Posted
技术标签:
【中文标题】如何使用左连接和内连接编写 laravel 查询?【英文标题】:How to write laravel query with left join and a inner join? 【发布时间】: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 次会发生什么?会不会导致性能下降?我就是这么想的
【参考方案1】:
这应该可以正常工作:
App\User::with('roles')->get();
【讨论】:
是的,你救了我!!这对我有用, $roles = Role::all(); $users = User::with('roles')->paginate(1);以上是关于如何使用左连接和内连接编写 laravel 查询?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?