Php 非功能拉威尔滤波器
我正在尝试根据用户选择创建项目过滤器。过滤器使用Php 非功能拉威尔滤波器,php,laravel,eloquent,Php,Laravel,Eloquent,我正在尝试根据用户选择创建项目过滤器。过滤器使用GET并从url获取其参数。 我尝试使用laravel的when函数,但过滤器不工作,它会不断返回相同的结果集,而不遵守我为其编写的过滤规则 我使用的是Laravel 8,我使用的是上面概述的方法 我觉得问题在于whereBetween子句between,即使将值硬编码到其中,结果还是和以前一样 对此,我们将提前感谢您的帮助 $queryString = $request->query(); $sortBy = null; $minMaxAr
GET
并从url获取其参数。
我尝试使用laravel的when
函数,但过滤器不工作,它会不断返回相同的结果集,而不遵守我为其编写的过滤规则
我使用的是Laravel 8,我使用的是上面概述的方法
我觉得问题在于whereBetween
子句between,即使将值硬编码到其中,结果还是和以前一样
对此,我们将提前感谢您的帮助
$queryString = $request->query();
$sortBy = null;
$minMaxArray = array();
if($queryString){
if (array_key_exists('sortby', $queryString)) {
$sortBy = ($queryString['sortby'] == 'lowest') ? 'ASC' : 'DESC';
}
if (array_key_exists('min', $queryString) || array_key_exists('max', $queryString)) {
$minMaxArray['min'] = preg_replace("/,/", '', $queryString['min']) ?: 0;
$minMaxArray['max'] = preg_replace("/,/", '', $queryString['max']) ?: 1000000;
}
}
$tutors = DB::table('users')
->join('tutors', 'users.email', '=', 'tutors.tutorEmail')
->where([
['users.name', 'like', '%' . trim($searchText) . '%'],
['tutors.tutorStrength', '<>', '-'],
['users.status', 'active'],
['users.gender', '<>', '-'],
['users.phone', '<>', '-'],
['users.role', 'tutor']
])
->orWhere([
['tutors.tutorStrength', 'like', '%' . trim($searchText) . '%'],
['users.status', 'active'],
['users.gender', '<>', '-'],
['users.phone', '<>', '-'],
['users.role', 'tutor'],
])
->orWhere([
['users.location', 'like', '%' . trim($searchText) . '%'],
['tutors.tutorStrength', '<>', '-'],
['users.status', 'active'],
['users.gender', '<>', '-'],
['users.phone', '<>', '-'],
['users.role', 'tutor'],
])
->when($minMaxArray, function ($subQuery) use ($minMaxArray){
return $subQuery->whereBetween('tutors.tutorFee', $minMaxArray);
})
->when($sortBy, function ($subQuery) use ($sortBy){
return $subQuery->orderBy('tutors.tutorFee', $sortBy);
}, function ($subQuery){
return $subQuery->inRandomOrder();
})
->select('tutors.tutorFee', 'tutors.feeType', 'tutors.tutorOccupation', 'tutors.tutorStrength', 'users.*')->distinct()->paginate(20);
$queryString=$request->query();
$sortBy=null;
$minMaxArray=array();
如果($queryString){
如果(数组\键\存在('sortby',$queryString)){
$sortBy=($queryString['sortBy']=='lower')?'ASC':'DESC';
}
如果(数组_key_存在('min',$queryString)|数组_key_存在('max',$queryString)){
$minMaxArray['min']=preg_replace(“/,/,”,“,$queryString['min'])?:0;
$minMaxArray['max']=preg_replace(“/,/”,“,$queryString['max'])?:1000000;
}
}
$tutors=DB::table('users')
->加入('tutors'、'users.email'、'='、'tutors.tutorEmail')
->在哪里([
['users.name'、'like'、'%'.trim($searchText)。'%'],
[tutors.tutorStrength','''-'],
['users.status','active'],
['users.gender','','-'],
['users.phone','','-'],
['users.role','tutor']
])
->或者在哪里([
['tutors.tutorStrength'、'like'、'%'.trim($searchText)。'%'],
['users.status','active'],
['users.gender','','-'],
['users.phone','','-'],
['users.role','tutor'],
])
->或者在哪里([
['users.location'、'like'、'%'.trim($searchText)。'%'],
[tutors.tutorStrength','''-'],
['users.status','active'],
['users.gender','','-'],
['users.phone','','-'],
['users.role','tutor'],
])
->当($minMaxArray,函数($subQuery)使用($minMaxArray){
返回$subQuery->whereBetween('tutors.tutorFee',$minMaxArray);
})
->when($sortBy,函数($subQuery)use($sortBy){
返回$subQuery->orderBy('tutors.tutorFee',$sortBy);
},函数($subQuery){
返回$subQuery->inRandomOrder();
})
->选择('tutors.tutorFee','tutors.feeType','tutors.tutoroccuption','tutors.tutorStrength','users.*')->distinct()->分页(20);
我把它修好了。原来我需要在每个where
和或where
子句上复制when
条件子句
非常感谢您的帮助。这对于搜索功能来说是错误的,您需要执行类似的操作Hi@KamleshPaul,我在链接上尝试了解决方案,但没有成功。我忘了补充说我正在使用laravel 8。