2017-08-29 85 views
0

我有使用表单过滤信息的问题,过滤的搜索引擎数据

这里是我的代码

$cooperation = Cooperation::with('user')->get(); 



$search_results = []; 

$search = Input::get('q'); 
$category = Input::get('c'); 
$land = Input::get('l'); 

if(!empty($search || $category || $land)){ 



    $search_results = $cooperation; 



    if (!empty($search)){ 
     $search_results = $search_results->where('title', 'like', '%'. $search .'%'); 

    } 

    if (!empty($category)){ 
     $search_results = $search_results->where('category', $category); 
    } 

    if (!empty($land)){ 
     $search_results = $search_results->where('land', $land); 
    } 

    $exist_s = true; 
    $not_s = false; 
    return view('cooperation.index', compact('cooperation', 'search_results', 'exist_s', 'not_s')); 


} 

else{ 

    $not_s = true; 
    $exist_s = false; 
    return view('cooperation.index', compact('cooperation', 'search_results', 'exist_s', 'not_s')); 

} 

从我试图通过按顺序排列,以筛选形式检索数据后每个变量但没有任何反应,唯一可行的是在$ category中过滤,但我不知道为什么其余的不起作用。我正在寻找一个解决方案,以便如何有效地过滤数据,我可以做if()if()之后,但与更多的变量,这将是一个非常低效的解决方案。

如果有人有任何想法提前谢谢。

回答

0

您要求你可以有以下输入变量:

$columns, $searchColumns, $search_operator, $search_input 

$columns可以通过它你可以订购,searchColumns可以通过它你想拥有搜索和search_operatorlike<列列,<=in>>=等,你甚至可以在值directionascdsc凑合,所以你可以有这样的事情:

return $query 
    ->orderBy($request->column, $request->direction) 
    ->where(function($query) use ($request, $searchColumns) { 
     if($request->has('search_input')) { 
      for($x = 0, $l = count($searchColumns); $x < $l; $x++) { 
       if($request->search_operator == 'in') { 
        $query->whereIn($searchColumns[$x], explode(',', $request->search_input)); 
       } else if($request->search_operator == 'like') { 
        $query->orWhere($searchColumns[$x], 'LIKE', '%'.$request->search_input.'%'); 
       } 
       else { 
        $query->orWhere($searchColumns[$x], $this->operators[$request->search_operator], $request->search_input); 
       } 
      } 
     } 
    }) 
    ->paginate(100); 
0

我不知道你的请求不起作用。但是,如果你正在寻找筛选结果的一个通用的办法,我相信你的过滤器阵列的简单的foreach循环变量会做的伎俩:如果你想有根据的高效搜索

$filters = []; //your variables such as category and land go in there 

foreach ($filters as $column => $value){ 
    $search_results = $search_results->where($column, $value); 
}