You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:21:14