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。