如何编写带有左联接和内联接的laravel查询?

时间:2019-01-23 16:14:52

标签: laravel eloquent

我有以下表格,并且想要对条件进行左连接和左连接表中的另一个内部连接

用户表

  
id  |  name  
 1     john  
 2     sam  
 3     cecil 

角色表

  
id | name  
 1  admin  
 2  editor 

model_has_roles表

role_id  | model_type | model_id
  1         App\User       1
  2         App\User       2

我想要的

如果 model_type为'App \ User',则在user.id和model_has_roles.model_id列上的用户表和model_has_roles表之间进行左联接,然后在Roles表和model_has_roles表之间进行另一个内部联接role_id和Roles.id列。所以结果应该是这样,


id | name | role

 1   john   admin
 2   sam    editor
 3   cecil   -

我尝试了以下查询,但无法正常工作

 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,并尝试使用其角色名称获取所有用户。

1 个答案:

答案 0 :(得分:1)

这应该可以正常工作:

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