2017-10-04 7 views
0

$category_id & $industry_idが配列としてajaxリクエストを受け取った場合、次のクエリを実行しました。時には$category_id & $industry_idはnull値になることがあります。では、配列がnullの場合、どのように文の行を避けるのですか?whereInの中でnull値を扱う方法は?

$products = DB::table('users') 
       ->join('products','products.auth_id','users.id') 
       ->Join('reviews','products.id','reviews.product_id') 
       ->select('products.*','users.avatar',DB::raw('(sum(rating)/count(user_id)) as rating'))    
       ->orwhereIn('products.category_id', [$request->get('category_id')]) 
       ->orwhereIn('products.industry_id',[$request->get('industry_id')]) 
       ->where('products.status','=','1')   
       ->groupBy('reviews.product_id') 
       ->latest()    
       ->get(); 
+0

COALESCEは())あなたが持っている値nullは、この行をスキップして、 '$ CATEGORY_ID = array_column($要求 - >は( 'CATEGORY_ID' を取得して2つの変数を取る –

+0

あなたの友達です); '$ INDENT_ID = array_column($ request-> get( 'industry_id'));' make ' - >カテゴリと業界がリクエストされたときに実行されます。 –

+0

データを返すときは、if文を使用することができます –

答えて

1

このクエリを試すと、このヘルプが表示されます。

$query = DB::table('users') 
    ->join('products','products.auth_id','users.id') 
    ->Join('reviews','products.id','reviews.product_id') 
    ->select('products.*','users.avatar',DB::raw('(sum(rating)/count(user_id)) as rating'))    
    ->where('products.status','=','1')   
    ->groupBy('reviews.product_id') 
    ->latest(); 

if ($request->has('category_id')) { 
    $query->orWhereIn('products.category_id', $request->get('category_id')); 
} 

if ($request->has('industry_id')) { 
    $query->orWhereIn(''products.industry_id', $request->get('industry_id')); 
} 
$products = $query->get(); 
0

最も簡単な解決策ところで

$query = DB::table('users') 
     ->join('products','products.auth_id','users.id') 
     ->Join('reviews','products.id','reviews.product_id') 
     ->select('products.*','users.avatar',DB::raw('(sum(rating)/count(user_id)) as rating'))    
     ->where('products.status','=','1')   
     ->groupBy('reviews.product_id') 
     ->latest(); 

    if ($categoryId = $request->get('category_id')) { 
     $query->orwhere('products.category_id', $categoryId); 
    } 

    if ($industryId = $request->get('industry_id')) { 
     $query->orwhere('products.category_id', $industryId); 
    } 

    $products = $query->get(); 

は - それはとにかく一つの値であるように見えるようorWhereorWhereInを変更しました。

+0

私はあなたの解決策を試したときにエラーが発生しました 'strtolower()は、文字列、配列が与えられると期待しています – User57

+0

そして、それは$ category_idまたは$ industry_idまたは$ – User57

+0

申し訳ありませんが、現実的には1つの値のように見えます - 配列からsqueare括弧にラップしています:[$ request-> get( 'category_id')]。 とにかく - 一般的なアプローチが必要です。 – ailok

関連する問題