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

Laravel数组循环更新特定日期车辆费用数据问题求助

Laravel车辆费用数据更新报错解决

我在Laravel框架中尝试根据特定日期更新车辆费用数据,表单视图如下:
车辆费用表单视图

通过匹配车牌号与日期执行数据更新时,遇到两个错误:

  • ErrorException Attempt to read property on int
  • ErrorException 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();
        } */
       
    
}

错误原因分析

  1. 初始化$veh = array('veh_reg_num' => $request->veh_reg_num);后,foreach遍历拿到的$data是整个车牌号数组(而非索引),用数组作为$request->date[$data]的索引会触发"Undefined array key"错误。
  2. 循环内将$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:35:35