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

Laravel中如何使用if语句避免作业数为0时的除0计算错误

解决方案

完全可以通过后端加条件判断的方式规避除0错误,同时前端校验作为第一道防线,后端兜底避免恶意绕过校验的情况:

1. 前端调整(可选,增强用户体验)

你当前视图里的jobcard_count输入框已经设置了min="1"和required属性,正常用户操作无法输入0或空值,但可以被浏览器调试工具修改绕过,所以无需额外改动,重点放在后端处理即可。

2. 后端控制器修改(必须,彻底解决问题)

在计算km_job字段前增加判断逻辑:如果jobcard_count大于0就正常计算并格式化,否则直接赋值为null(对应你说的“无”,需要提前确认数据库里km_job字段允许为NULL),如果不想存NULL也可以存为0或者'0.00'这类符合你业务逻辑的值。

修改后的控制器代码如下:

public function store(Request $request)
{
    $energy = new VehicleLog();
    $request->validate([
        'start_odo' => 'required',
        'end_odo' => 'required|gt:start_odo',
        // 也可以在验证规则里加jobcard_count的校验,进一步减少异常情况
        'jobcard_count' => 'required|integer|min:0',
    ]);

    $km = $request->input('end_odo') - $request->input('start_odo');
    $jobCount = $request->input('jobcard_count');

    $energy->jobcard_count = $jobCount;
    $energy->start_odo = $request->input('start_odo');
    $energy->end_odo = $request->input('end_odo');
    $energy->km = $km;
    
    // 新增判断逻辑
    if ($jobCount > 0) {
        $energy->km_job = number_format($km / $jobCount, 2);
    } else {
        // 这里可以根据你的业务需求改,存null代表无,也可以写0或者其他值
        $energy->km_job = null;
    }
    
    $energy->save();
    return redirect('/vmaintenance')->with('success', 'data added');
}

额外说明

如果你后续在前端展示时要把km_job为null的情况显示成“无”,只需要在输出的时候加个简单的判断即可:

{{ $log->km_job ?? '无' }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:03