Laravel调用attach向order_service中间表插数据报Undefined offset:0错误
错误原因
- 核心问题是前后端参数名不匹配:前端Blade页面中数量输入框的
name属性为qty[],提交的请求参数名为qty,但控制器中你使用$request->input('quantities', [])获取数量,quantities参数不存在,所以$quantities是空数组,访问$quantities[$service]时就会触发索引未定义错误。 - 额外需要注意:你提到的中间表名
order_serrvice存在拼写错误,正确应为order_service,如果模型关联定义中也使用了错误名称需要同步修正。
修复方案
你可以任选以下任意一种方案修改,保持前后端参数名一致即可:
方案1:修改控制器参数获取逻辑(更推荐)
把控制器中获取数量的代码改为匹配前端的qty参数,同时可以把for循环改为foreach遍历,避免数组长度不一致引发的其他错误:
$order = Order::create($data); $services = $request->input('services', []); // 改为获取qty参数 $quantities = $request->input('qty', []); // 用foreach遍历更安全 foreach ($services as $index => $serviceId) { if ($serviceId != '' && isset($quantities[$index])) { $order->services()->attach($serviceId, ['quantity' => $quantities[$index]]); } }
方案2:修改前端Blade代码
把Blade页面中数量输入框的name属性改为和后端一致的quantities[]:
<td><input type="number" name='quantities[]' placeholder='Enter Qty' class="form-control qty" step="0" min="0"/></td>
内容的提问来源于stack exchange,提问作者Zahraa
相关产品推荐
相关产品推荐

