Laravel API JSON数组数据逐行验证及错误返回实现问题
#Laravel 数组项逐一验证并收集错误解决方案
你可以在循环验证过程中新增错误数组专门收集失败条目的错误信息,合法数据可以统一归集后批量插入提升性能,参考实现代码如下:
// 初始化错误收集容器和合法数据容器 $errors = []; $validItems = []; $datas = $request->all(); foreach ($datas as $index => $data) { $validator = Validator::make((array)$data, [ 'acktime' => 'required|date', // 新增date规则校验时间格式合法性 'temp' => 'required|numeric' ]); if ($validator->fails()) { // 记录当前失败条目的索引和对应的错误详情 $errors["第{$index}项"] = $validator->errors()->all(); continue; } // 合法数据加入待插入队列 $validItems[] = [ 'acktime' => $data->acktime, 'temp' => $data->temp, 'synctime' => now() ]; } // 批量插入合法数据,避免循环单条插入导致的多次数据库IO开销 if (!empty($validItems)) { rawData::insert($validItems); } // 统一返回处理结果 $responseData = [ 'success_count' => count($validItems), 'fail_count' => count($errors), 'errors' => $errors ]; // 存在错误时可根据业务需求调整返回状态码,比如422参数错误 $statusCode = empty($errors) ? 200 : 422; return response()->json($responseData, $statusCode);
注意:使用批量插入前请确保rawData模型的$fillable属性已包含acktime、temp、synctime三个字段,或设置$guarded = []放开批量赋值限制。
内容的提问来源于stack exchange,提问作者Stefano Martini
相关产品推荐
相关产品推荐

