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

Laravel视图向控制器传数组仅获单条数据问题求助

问题分析与解决方案

你遇到的问题核心原因很明确:表单循环生成的input字段名完全重复,提交表单时后一行的字段值会直接覆盖前一行,所以控制器只能接收到最后一行的数据。

修复步骤

1. 修改视图中的表单字段名

把每个input的name属性改成数组格式(比如name="code[]"),这样提交后Laravel会自动把同名字段的所有值整理成一个数组:

<form method="POST" action="{{ url('/forms/reports') }}" >
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    @foreach ($results as $result)
        <input value="{{ $result->code }}" name="code[]">
        <input value="{{$result->name}}" name="name[]">
        <input value="{{$result->user}}" name="user[]">
        <input value="{{$result->number}}" name="number[]">
    @endforeach
    <div class="col-xs-9">
    </div>
    <div class="col-xs-3 container-download">
        <button type="submit" class="btn btn-download" id="btn-download" >Download</button>
    </div>
</form>

2. 调整控制器接收数据的逻辑

现在每个字段都会是包含所有行数据的数组,你可以把它们整理成更易处理的二维数组:

public function generateExcel(Request $request) {
    // 获取所有行的数组数据
    $codes = $request->input('code');
    $names = $request->input('name');
    $users = $request->input('user');
    $numbers = $request->input('number');

    // 整理成二维数组,方便后续处理Excel
    $allResults = [];
    foreach ($codes as $index => $code) {
        $allResults[] = [
            'code' => $code,
            'name' => $names[$index],
            'user' => $users[$index],
            'number' => $numbers[$index]
        ];
    }

    Log::debug($allResults);
}

测试效果

提交表单后,日志会输出包含两行完整数据的二维数组:

[2020-12-30 12:43:58] local.DEBUG: array (
  0 => array (
    'code' => '1',
    'name' => 'Test Name 1',
    'user' => 'user1',
    'number' => '1',
  ),
  1 => array (
    'code' => '2',
    'name' => 'Test Name 2',
    'user' => 'user2',
    'number' => '2',
  ),
)

这样就能完整接收到所有行的数据了!

内容的提问来源于stack exchange,提问作者delv123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:15:37