laravel - 内爆函数返回内爆():传递的参数无效
问题描述
我内爆了一些 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();
解决方案
当 $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();
推荐阅读
- arduino - 我的 while 循环只取第一个值,即使它在 arduino 中重新定义
- ios - 使用 Firebase Emulator 在 XCode 中测试 Firestore 时如何设置测试数据?
- python - 我想在 Python 中删除一个多维元组列表的元素
- excel - 复制和 PasteSpecial 的 vba 问题
- nginx-reverse-proxy - NGINX RP 作为我所有 LAN 服务的网关
- pytest-html - Pytest-html 显示错误“无法识别的参数”
- python - 使用python将yaml文件转换为ini文件
- javascript - javascript 使用 Array fill() 函数来初始化一个二维数组
- c++ - PImpl 习惯用法在单独的源文件中使用 std::unique_pointer 和实现类
- azure - 在 azure cloud shell 编辑器中创建新文件