Laravel数组循环更新特定日期车辆费用数据问题求助
Laravel车辆费用数据更新报错解决
我在Laravel框架中尝试根据特定日期更新车辆费用数据,表单视图如下:
通过匹配车牌号与日期执行数据更新时,遇到两个错误:
ErrorException Attempt to read property on intErrorException Undefined array key 'data'
当前控制器代码:
public function add_vehicle_expense(Request $request) { $veh = array('veh_reg_num' => $request->veh_reg_num); foreach ($veh as $data) { print_r($request->date[$data]); dd(); $veh = Sale_report::where('date',$request->date[$data])->where('veh_reg_num', $request->veh_reg_num[$data])->update(['diesel_qty'=> $request->qty[$data], 'diesel_rate'=> $request->rate[$data], 'diesel_amount'=> $request->total_amount[$data], 'other_expense'=> $request->other_exp[$data]]); } if ($veh) { return redirect()->back()->with('Data Store Successfully'); } //$veh = Sale_report::where('date',$request->date)->where('veh_reg_num', $request->veh_reg_num)->update(['diesel_qty'=> $request->qty, 'diesel_rate'=> $request->rate, 'diesel_amount'=> $request->total_amount, 'other_expense'=> $request->other_exp]); /* foreach ($request->date as $reg_num => $key ) { $s = Sale_report::where('date',$request->date[$reg_num])->where('veh_reg_num',$request->veh_reg_num[$reg_num])->first(); $s->diesel_qty = $request->qty[$reg_num]; $s->diesel_rate = $request->rate[$reg_num]; $s->diesel_amount = $request->total_amount[$reg_num]; $s->other_expense = $request->other_exp[$reg_num]; $s->update(); } */ }
错误原因分析
- 初始化
$veh = array('veh_reg_num' => $request->veh_reg_num);后,foreach遍历拿到的$data是整个车牌号数组(而非索引),用数组作为$request->date[$data]的索引会触发"Undefined array key"错误。 - 循环内将
$veh重新赋值为update()方法的返回值(受影响行数,int类型),后续操作会因读取int的属性触发"Attempt to read property on int"错误。
修正后的控制器代码
public function add_vehicle_expense(Request $request) { // 验证提交的字段为数组且必填 $request->validate([ 'veh_reg_num' => 'required|array', 'date' => 'required|array', 'qty' => 'required|array', 'rate' => 'required|array', 'total_amount' => 'required|array', 'other_exp' => 'required|array', ]); // 遍历数组索引,匹配每行的对应数据 foreach ($request->veh_reg_num as $index => $vehRegNum) { // 跳过字段不完整的行 if (!isset($request->date[$index], $request->qty[$index], $request->rate[$index], $request->total_amount[$index], $request->other_exp[$index])) { continue; } // 根据日期和车牌号更新数据 Sale_report::where('date', $request->date[$index]) ->where('veh_reg_num', $vehRegNum) ->update([ 'diesel_qty' => $request->qty[$index], 'diesel_rate' => $request->rate[$index], 'diesel_amount' => $request->total_amount[$index], 'other_expense' => $request->other_exp[$index] ]); } return redirect()->back()->with('success', '数据更新成功'); }
额外注意事项
确保表单中所有相关字段的name属性设置为数组格式,比如:
<input type="text" name="veh_reg_num[]" placeholder="车牌号" /> <input type="date" name="date[]" placeholder="日期" /> <input type="number" name="qty[]" placeholder="柴油数量" /> <input type="number" name="rate[]" placeholder="柴油单价" /> <input type="number" name="total_amount[]" placeholder="柴油总价" /> <input type="number" name="other_exp[]" placeholder="其他费用" />
内容的提问来源于stack exchange,提问作者Mani-Peer
相关产品推荐
相关产品推荐

