首页 > 解决方案 > 内爆函数返回内爆():传递的参数无效

问题描述

我内爆了一些 id,它在数组至少有 1 个值时起作用。如果数组为空,则 implode 函数返回错误,因为 implode(): Invalid arguments passed

$arr=implode(',', $request->id);


 $product= DB::table('sub_categories')
        ->join('categories','sub_categories.category_id','=','categories.category_id')
        ->join('products','sub_categories.subcategory_id','=','products.subcategory_id')
         ->join('colors','colors.color_id','=','products.product_color')
         ->select('products.*','categories.category_name','sub_categories.subcategory_name','colors.*')
         ->whereRaw('color_id IN ('.$arr.')')
         ->where(strtolower('sub_categories.subcategory_slug'),$request->subcategory_id) 
        ->orderBy('products.product_name','ASC')
        ->get();

标签: laravel

解决方案


当 $request->id 为空时,尝试使用默认值来解决方案

$arr = implode(',', $request->input('id', []));

可以在查询中有条件地执行 whereIn


```php
$arr=implode(',', $request->input('id', []));


 $query= DB::table('sub_categories')
        ->join('categories','sub_categories.category_id','=','categories.category_id')
        ->join('products','sub_categories.subcategory_id','=','products.subcategory_id')
         ->join('colors','colors.color_id','=','products.product_color')
         ->select('products.*','categories.category_name','sub_categories.subcategory_name','colors.*')
         ->where(strtolower('sub_categories.subcategory_slug'),$request->subcategory_id);

if(!empty($arr)) {    
    $query->whereRaw('color_id IN ('.$arr.')');
}

$product = $query->orderBy('products.product_name','ASC')->get();


推荐阅读