php - 在 Laravel 中保存员工编号会引发遇到 A non-numeric value 的错误
问题描述
我正在尝试将员工编号保存为 EMP00001 格式。我在 store 下的控制器中使用了以下代码,并且遇到了 A non-numeric value 的错误。
$emp = Employee::create($request->all()+
['employee_number' => Employee::max('employee_number') + 1 ]);
$employee_code = sprintf ("EMP",'%06d');
$employee_no = ($employee_code +$emp);
$employee_no->save();
employee_number 的 MySQL 列是 varchar。谁能看到我做错了什么?
解决方案
它会抛出这样的错误,因为Employee::max('employee_number')
返回一个字符串,它是 varchar 列类型,因为您以EMP00001
. 您为 PHP 设置了严格的类型,这很好。尝试在主查询之外调用它,提取号码,添加号码并进行插入:
$num_employee_max = Employee::max('employee_number');
$num_employee = (int)str_replace('EMP', '', $num_employee_max);
$new_num_employee = $num_employee + 1;
$employee_code = sprintf('EMP%06d',$new_num_employee);
$sanitized values = $request->all(); //do the proper sanitization instead of this
$emp = Employee::create( $sanitized values +
['employee_number' => $employee_code]);
注意:避免直接在数据库中从输入中插入未经处理的值。
另外, sprintf ("EMP",'%06d'); 不做任何事情。了解 sprintf: http: //php.net/manual/en/function.sprintf.php
推荐阅读
- javascript - 使用内联样式计算子元素
- c++ - QT 旋转物体问题
- html - iOS html 表格行和线性渐变看起来不正确
- r - 按列特定条件替换 NA
- objective-c - NSTask 中的变量 - Objective-C Cocoa
- python - scipy.odr 无法拟合指数函数
- javascript - NodeJS 中的 Lambda 函数,可用于执行购买菜谱的交易
- sql - 如何显示每个用户的评论总数
- mysql - MySql 我如何返回最近 60 天和不在 60 天内的多个特定 ID?
- javascript - React useState hook 使用初始状态值并忽略更新