Php 如何处理其中的空值?

Php 如何处理其中的空值?,php,laravel,laravel-5,laravel-query-builder,Php,Laravel,Laravel 5,Laravel Query Builder,我将执行以下查询,$category\u id和$industry\u id作为数组通过ajax请求。所以有时候$category\u id和$industry\u id可能是空值。那么,当数组为空时,如何避免该语句行呢 $products = DB::table('users') ->join('products','products.auth_id','users.id') ->Join('reviews','produ

我将执行以下查询,$category\u id和$industry\u id作为数组通过ajax请求。所以有时候$category\u id和$industry\u id可能是空值。那么,当数组为空时,如何避免该语句行呢

$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();
最简解

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

顺便说一句-已将orWhere更改为orWhere as,但看起来它仍然是一个值。

尝试此查询会有所帮助

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

COALESCE是您的朋友当值为null时,您可以使用if语句跳过此行并返回数据take two variable with$category_id=array_column$request->get'category_id';和$industry\u id=array\u column$request->get'industry\u id';使用where条件进行查询时进行->生成!当类别和行业有要求时执行!当我尝试使用您的解决方案时,我遇到了以下错误strtolower希望参数1是字符串,数组给定,而这不是一个值。我正在发送一个数组,其中可能有$category\u id或$industry\u id或两者。很抱歉,但它实际上看起来像一个值-您正在从它生成数组,并将其包装到尖括号中:[$request->get'category\u id']。无论如何,一般的aproach应该适合。