2017-08-30 41 views
0

我遇到Laravel表加入问题。当下面的代码运行其显示结果:Laravel多个加入问题

$result = DB::table('users') 
     ->join('role_user', 'users.id', '=', 'role_user.user_id') 
     ->where('role_user.role_id', $roleId)   
     ->join('roles', 'role_user.role_id', '=', 'roles.id') 
     ->select('users.*','role_user.role_id','roles.display_name','roles.description')   
     ->get(); 

但是当我将代码分成如下:

$result = DB::table('users'); 
     $result->join('role_user', function ($join) { 
      $join->on('role_user.role_id', '=', 'users.id') 
      ->where('role_user.role_id', $roleId);   

     }); 
     $result->join('roles', function ($join){ 
      $join->on('role_user.role_id', '=', 'roles.id'); 
     }); 
     $result->select('users.*','role_user.role_id','roles.display_name','roles.description'); 
     $result->get(); 

似乎具有“用户”表中加入了“角色”表,但它需要与'role_user'表连接,因为它在第一个查询上。

在此先感谢。

+0

你能解释一下你到底想要什么吗?问题不明确 – Sletheren

+0

你有没有想过使用关系来做到这一点?如果你使用pivot_table作为roles_users,用户将拥有belongsToMany角色,角色也是一样的,那么你可以用users :: with('roles)或roles :: with('users') – rchatburn

+0

@Sletheren我有一个加入第二个表格和第三个表格与关系有关的问题。第三张桌子试图加入第一张桌子。 – Tristup

回答

0

您正试图访问闭包/匿名函数中的变量$ roleId。因此,您需要将此变量传递给闭包。这应该导致相同的结果。

$result = DB::table('users') 
    ->join('role_user', function ($join) use ($roleId) { 
     $join->on('role_user.role_id', '=', 'users.id') 
     ->where('role_user.role_id', $roleId) 
    }) 
    ->join('roles', function ($join){ 
     $join->on('role_user.role_id', '=', 'roles.id'); 
    }) 
    ->select('users.*','role_user.role_id','roles.display_name','roles.description')  
    ->get(); 
+0

我认为你已经给出了第一个问题。我需要第二个的格式。 – Tristup

+0

@Tristup根据您的需求更新了查询。应该正常工作,在本地进行测试。 – fab

+0

但@fab我需要它被分解成像我的第二个查询不同。如果角色表没有连接到关系所在的角色用户。它建立与用户表的关系。请尝试获取与第二个相同的格式。 – Tristup