функция implode возвращает функцию implode(): переданы недопустимые аргументы

#laravel

#laravel

Вопрос:

Я ввожу некоторый идентификатор, он работает, когда массив имеет как минимум 1 значение. если массив равен нулю, функция implode возвращает ошибку как implode(): переданы недопустимые аргументы

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

Ответ №1:

Попробуйте использовать значение по умолчанию для учета сценария, когда $request->id равно null

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

Можно выполнить Where условно в запросе

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

 

Комментарии:

1. Если $request->input(‘id’) возвращает null, то $arr будет пустой строкой, поэтому, если вы используете where в запросе, то, естественно, это выдаст ошибку. У вас также должны быть некоторые значения по умолчанию для запроса, иначе всякий раз, когда $request->input(‘id’) имеет значение null, запрос выдаст ошибку. Или вы можете использовать условное обозначение в запросе. Если вы можете опубликовать код запроса, возможно, я могу предложить

2. @seemapatil обновил ответ, чтобы включить ваш запрос, дайте мне знать, если это сработает для вас

Ответ №2:

Если данные не являются массивом, то implode() функция выдаст предупреждение об ошибке. Чтобы избавиться от ошибки, вы можете проверить массив с помощью метода is_array():

 if(is_array($request->id)){
   $arr = implode(',', $request->id);
} else {
   $arr = NULL;
}