Laravel 8 API控制器存储JSON数组的简洁实现方案问询
Laravel 8 API 批量存储数组数据的简洁实现方案
前置配置
首先需要确保rawData模型开启对应字段的批量赋值权限,在模型文件中添加如下配置:
// app/Models/rawData.php protected $fillable = ['a'];
注:Laravel会自动解析application/json类型的请求参数,$request->all()已经是解析后的数组结构,无需手动做JSON解码操作。
两种简洁实现方案
方案1:使用createMany(首选)
该方法是Eloquent提供的批量创建方法,会自动处理created_at/updated_at时间戳,同时会触发模型的creating/created等事件,完全替代原有循环逻辑,代码如下:
// 验证通过后直接调用即可 rawData::createMany($request->all());
方案2:使用insert(适合超大量数据插入)
如果插入的数据量较大,不需要触发模型事件,可以使用查询构造器的insert方法,一次性完成入库,性能远高于逐行保存。需要手动补充时间戳的话可以配合集合处理:
rawData::insert( collect($request->all()) ->map(fn ($item) => [ 'a' => $item['a'], 'created_at' => now(), 'updated_at' => now() ]) ->toArray() );
原有代码问题说明
你原有循环代码存在变量名不匹配的错误:实例化模型后赋值给了$data变量,却调用了未定义的$newrawData->save(),运行时会报错,使用上述方案可以直接规避这类手写循环的低级错误。
内容的提问来源于stack exchange,提问作者Stefano Martini
相关产品推荐
相关产品推荐

