2017-10-04 80 views
0

我有以下查询被执行,其中$category_id & $industry_id通过ajax请求作为数组来执行。所以有时$category_id & $industry_id可能为空值。那么当数组为空时,如何避免这条语句?如何处理where内部的空值?

$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()是你的朋友 –

+0

您可以使用,如果当null值必须跳过此行并返回数据 –

+0

举两个变量,声明'$ CATEGORY_ID = array_column($请求 - >获取(“CATEGORY_ID”) );''和'$ industry_id = array_column($ request-> get('industry_id'));'make' - > when when where where condition!它在类别和行业要求时执行! –

回答

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(); 

BTW - 改变orWhereInorWhere因为看起来它是一个价值反正。

+0

当我试着用你的解决方案,我有以下错误'strtolower()期望参数1是字符串,数组给予' – User57

+0

而这不是一个值它是我发送的数组,可能有$ category_id或$ industry_id或两者 – User57

+0

我很抱歉,但它真的看起来像一个值 - 你正在从数组中包装它到squeare括号:[$ request-> get('category_id')]。无论如何 - 一般应该适合。 – ailok