2017-08-29 88 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); 
}