我尝试按子查询中的角色过滤我的用户,但返回所有记录
这里我有一个普通的模型查询,如果请求包含位置参数
,我会使用子查询进行扩展$query = User::select()-> ....
此处是$request->has('position')
if ($request->has('position')) {
$role = $request->get('position');
if ($role == 'all') {
$query->with('roles');
} else {
$query->with(['roles' => function($query) use($role) {
$query->where('id', $role);
}]);
}
} else {
$query->with('roles');
}
但是这个会返回已过滤的和其他用户
答案 0 :(得分:0)
我使用whereHas
模型方法工作,这是洞重构
if ($request->has('position')) {
$role = $request->get('position');
if ($role !== 'all' && $role !== 0 ) {
$query->whereHas('roles', function($query) use($role) {
return $query->where('id', $role);
});
}
}