Laravel PHP中如何将多组数组表单数据存入MySQL数据库
Laravel 数组格式表单数据按索引批量存库方案
图1:Laravel接收到的表单请求数据
图2:MySQL数据库预期存储效果
核心逻辑是把同索引下的各字段值重组为单条完整记录,再批量写入数据库,具体实现如下:
操作步骤
- 过滤非业务字段:先剔除请求里的
_token、update_plan这类不需要入库的辅助字段 - 按索引重组数据:以有效字段的数组长度为总记录数,遍历索引拼装每条记录的字段值,对长度不足的字段设置默认值避免报错
- 批量执行写入/更新:调用Laravel模型的批量操作方法完成存库
代码示例
控制器中直接使用以下逻辑即可,注意替换成你自己的模型名:
// 提取所有业务字段,排除表单辅助字段 $payload = $request->except(['_token', 'update_plan']); // 以description字段的数组长度为总记录数,和你当前2条数据的结构匹配 $total = count($payload['description']); $records = []; for ($idx = 0; $idx < $total; $idx++) { $records[] = [ 'description' => $payload['description'][$idx] ?? '', 'site_id' => $payload['site_id'][$idx] ?? 0, 'category_id' => $payload['category_id'][$idx] ?? 0, 'field_1' => $payload['field_1'][$idx] ?? '', 'field_2' => $payload['field_2'][$idx] ?? '', 'field_3' => $payload['field_3'][$idx] ?? '', 'field_4' => $payload['field_4'][$idx] ?? '', 'field_5' => $payload['field_5'][$idx] ?? '', 'price' => $payload['price'][$idx] ?? 0, 'created_at' => now(), 'updated_at' => now(), ]; } // 场景1:全新插入数据,替换为你的模型名,比如HostingPlan HostingPlan::insert($records); // 场景2:需要判断重复就更新的场景,使用upsert,替换对应唯一字段和更新字段即可 // HostingPlan::upsert( // $records, // ['site_id', 'category_id'], // 用来判断记录是否存在的唯一字段 // ['description', 'field_1', 'field_2', 'field_3', 'field_4', 'field_5', 'price', 'updated_at'] // 存在时需要更新的字段 // );
注意:使用批量操作前,记得在对应模型的
$fillable属性中加入所有允许批量赋值的字段,否则会触发批量赋值报错。代码中用??空合并运算符处理了数组长度不一致的问题(比如你当前field_5数组长度只有1),默认值可以根据业务需求自行调整。
内容的提问来源于stack exchange,提问作者Rahi
相关产品推荐
相关产品推荐

