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

在Laravel中如何实现两个SQL字段相减并将结果存入km_travel字段

解决方案

方法1:直接在控制器内计算(逻辑直观,适合新手)

直接在save()方法执行前添加差值计算的赋值逻辑即可,修改后的完整代码如下:

public function store(Request $request)
{
    // 先做请求校验,避免非法数据入库
    $validated = $request->validate([
        'start_odo' => 'required|numeric|min:0',
        'end_odo' => 'required|numeric|gte:start_odo',
    ]);

    $count= new VehicleLog();
    $count->start_odo = $validated['start_odo'];
    $count->end_odo = $validated['end_odo'];
    // 新增行驶里程计算逻辑
    $count->km_travel = $validated['end_odo'] - $validated['start_odo'];

    $count->save();
    return redirect('/resulttravel')->with('success', 'data added');
}

方法2:模型自动计算(适合长期维护,避免重复写逻辑)

如果后续多个业务场景都会新增/修改VehicleLog数据,可以把计算逻辑放到模型的saving钩子中,每次保存数据时自动填充km_travel字段:

  1. 打开app/Models/VehicleLog.php文件,添加如下代码:
protected static function booted()
{
    static::saving(function ($vehicleLog) {
        $vehicleLog->km_travel = $vehicleLog->end_odo - $vehicleLog->start_odo;
    });
}
  1. 配置完成后控制器不需要额外写km_travel的赋值逻辑,原有代码保存时会自动计算填充对应字段。

注意事项

  • 确保数据库中km_travel字段的类型为数值类型(int/float/double等),不要使用字符串类型
  • 校验规则中的gte:start_odo会自动校验结束里程大于等于起始里程,避免出现负数的行驶里程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:18:04