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
是!过滤器将是这样的,如果有人进入城市和角色,例如,它将像那些谁的角色和城市过滤