2016-10-17 52 views
1

我在電子商務網站中應用搜索過濾器。在這裏,客戶可以選擇各種領域,如顏色,形狀,價格,對稱性,拋光,清晰度和各種其他的東西。 客戶選擇任何選項時,應添加到他選擇的最後一個選項。因此,他/她可能具有必須提取並顯示的條件組合。 對於一個數組條件,我可以使用whereIn在laravel中,但對於多個數組條件,我應該使用什麼。我不確定哪個數組將是空的。如何從多個陣列條件的laravel中的表中檢索數據

這裏是我的過濾器的代碼: -

public function Filter(Request $request) 
{ 
    $conditions = array(); 
    if($request->isMethod('post')) { 
     $data = array_filter($request->all()); 

     $shapes = array(); 
     $amount = array(); 
     $carat = array(); 
     $cut = array(); 
     $color = array(); 
     $clarity = array(); 
     $cerifying_agency = array(); 
     $flourscence = array(); 
     $polish = array(); 
     $symmetry = array(); 
     // $conditions=array(); 
     if(isset($data['shape'])){ 
      $shapes = $data['shape']; 
     } 
     if(isset($data['amount'])){ 
      $amount = $data['amount']; 
     } 
     if(isset($data['carat'])){ 
      $carat = $data['carat']; 
     } 
     if(isset($data['cut'])){ 
      $cut = $data['cut']; 
     } 
     if(isset($data['color'])){ 
      $color = $data['color']; 
     } 
     if(isset($data['clarity'])){ 
      $clarity = $data['clarity']; 
     } 
     if(isset($data['ca'])){ 
      $cerifying_agency = $data['ca']; 
     } 
     if(isset($data['fl'])){ 
      $flourscence = $data['fl']; 
     } 
     if(isset($data['polish'])){ 
      $polish = $data['polish']; 
     } 
     if(isset($data['symmetry'])){ 
      $symmetry = $data['symmetry']; 
     } 

    } 
} 

我已附加UI的快照,並正被稱爲濾波器函數的陣列中對AJAX的數據格式: - Sorry I couldnt embed the picture as Stackoverflow is not allowing me to do so

回答

0

您可以使用此相似的功能:

function appendFilter($query, $array, $fieldName){ 
    return $query->where(function($query) use ($array, $fieldName) { 
     $query->whereIn($fieldName, $array)->orWhereRaw(empty($array) ? "true" : "false"); 
    }); 
} 

您可以使用它像這樣:

$productQuery = DB::table("products"); 
$productQuery = appendFilter($productQuery, $shapes, "shape"); 
$productQuery = appendFilter($productQuery, $otherFilters, "otherField"); 
$results = $productQuery->get(); 

什麼這個函數的作用是它追加嵌套在那裏與,做,其中第一部分,但它也有orWhereRaw在數組爲空的情況下附加原始「true」值(否則爲false) 因此,如果您的數組具有過濾值s是空的,它不會影響你選擇的值。

0

那麼,您可以像使用常規whereIn那樣使用這些條件。

例如:

$posts = Post::latest(); 

if($request->has('carat')) 
{ 
    $posts->whereIn('carat', $request->input('carat'); 
} 

if($request->has('shape')) 
{ 
    $posts->whereIn('shape', $request->input('shape')); 
} 

.... 

$posts = $posts->get(); 

一定要首先確認您的條件。

相關問題