【问题标题】:How to write laravel query with left join and a inner join?如何使用左连接和内连接编写 laravel 查询?
【发布时间】: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 次会发生什么?会不会导致性能下降?我就是这么想的

标签: laravel eloquent


【解决方案1】:

这应该可以正常工作:

App\User::with('roles')->get();

【讨论】:

  • 是的,你救了我!!这对我有用, $roles = Role::all(); $users = User::with('roles')->paginate(1);
猜你喜欢
  • 2014-09-29
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多