如何处理whereIn中的空值?
How to handle null value inside whereIn?
我要执行以下查询,其中 $category_id & $industry_id
作为数组通过 ajax 请求。所以有时 $category_id & $industry_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();
顺便说一句 - 将 orWhereIn
更改为 orWhere
看起来它无论如何都是一个值。
试试这个查询会有帮助。
$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();
我要执行以下查询,其中 $category_id & $industry_id
作为数组通过 ajax 请求。所以有时 $category_id & $industry_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();
顺便说一句 - 将 orWhereIn
更改为 orWhere
看起来它无论如何都是一个值。
试试这个查询会有帮助。
$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();