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
相关产品推荐
相关产品推荐

