Php 使用各种关系的拉威尔滤波器

Php 使用各种关系的拉威尔滤波器,php,laravel,filter,eloquent,laravel-6,Php,Laravel,Filter,Eloquent,Laravel 6,我正在使用关系进行筛选这是我的控制器代码: $userList = User::with(['role' ,'userMetaData','userBet','userComission','userPartnership']) ->where('deleted', '=', '0') ->when($request->parent_id, function ($builder, $parent_id) { return $builder->

我正在使用关系进行筛选这是我的控制器代码:

$userList = User::with(['role' ,'userMetaData','userBet','userComission','userPartnership'])
    ->where('deleted', '=', '0')
    ->when($request->parent_id, function ($builder, $parent_id) {
        return $builder->where('parent_id', $parent_id);
    })
    ->when($request->role_id, function ($builder, $role_id) {
        return $builder->where('role', $role_id);
    })
    ->when($request->to && $request->from , function ($builder) use ($request) {
        return $builder->whereBetween('exposure_limit', [$request->from, $request->to]);
    })
    ->when($request->city, function ($builder) use ($request) {
        return $builder->whereHas('userMetaData', function($query) use ($request){
            $query->where('city', $request->sport);
        });
    })
    ->orderBy('created_at', 'DESC')
    ->get();


在本例中(在我的代码中),我试图使用
whereHas()
以雄辩的方式从另一个表(在关系中)中筛选数据,但这是我缺少的:

在您的示例中,当您使用
Wherehas
userMetaData
时,它将过滤并仅为那些拥有
city
的用户提供
$request->sport

在另一种情况下,您将
与('userMetaData')
一起使用,这意味着您在过滤器中获得的任何用户都将返回所有
userMetaData

->when($request->city, function ($builder) use ($request) {
        return $builder->whereHas('userMetaData', function($query) use ($request){
            $query->where('city', $request->sport);
        })->with(['userMetaData' => function($q) use ($request) {
            $q->where('city', $request->sport);
        }]);
    }) 

User::with(['role'、'userBet'、'usercommission'、'userPartnership'])中删除
userMetaData

是!过滤器将是这样的,如果有人进入城市和角色,例如,它将像那些谁的角色和城市过滤