Laravel多个加入问题
问题描述:
我遇到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'表连接,因为它在第一个查询上。
在此先感谢。
答
您正试图访问闭包/匿名函数中的变量$ 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();
你能解释一下你到底想要什么吗?问题不明确 – Sletheren
你有没有想过使用关系来做到这一点?如果你使用pivot_table作为roles_users,用户将拥有belongsToMany角色,角色也是一样的,那么你可以用users :: with('roles)或roles :: with('users') – rchatburn
@Sletheren我有一个加入第二个表格和第三个表格与关系有关的问题。第三张桌子试图加入第一张桌子。 – Tristup