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
相关产品推荐
相关产品推荐

