Laravel过滤器与where返回all的关系

时间:2017-12-03 17:42:05

标签: laravel-5 collections filter eloquent relationship

我尝试按子查询中的角色过滤我的用户,但返回所有记录

这里我有一个普通的模型查询,如果请求包含位置参数

,我会使用子查询进行扩展
$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');
        }

但是这个会返回已过滤的和其他用户

1 个答案:

答案 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);
        });
    }
}