php - 按 Laravel PHP/MYSQL 中添加数字的最后日期递增唯一的 INVOICE 编号
问题描述
我需要按添加编号的最后日期生成唯一的递增发票编号(字符串)。发票号码没有默认格式,用户可以自由注册任何他想要的字符串。示例:00001、abc、EP-2018/00005..等。
好的,需要怎么工作?如果用户注册字符串 0001 作为发票编号,则在“添加新发票”页面上,需要显示下一个递增编号,在这种情况下将为 0002。如果用户使用字符串 abc 作为发票编号注册发票,则在页面“添加新发票”,需要显示abd。因此,如您所见,取决于添加号码的最后日期,因为第二个字符串是 abc,现在我们在“添加新发票”页面上看到 abd 是下一个唯一号码。
另一个例子,这里的工作变得非常复杂:如果在 db 中我们已经有编号为“abd”的发票而且这很旧,那么我们需要获取下一个递增编号,这是“abe”。
数据库表“发票”:
- id(自动递增)
- 数字(字符串)
- 更新时间(时间戳)
示例 1:
编号 | 号码 | 更新时间 ---------------------- 1 美国广播公司 2020-03-14 11:50:09 2 abd 2020-03-14 11:39:03
所以,最后更新/添加的数字是“abc”,下一个数字需要是“abe”
示例 2:
编号 | 号码 | 更新时间 ---------------------- 1 安倍 2020-03-14 11:49:09 2 美国广播公司 2020-03-14 11:50:09 3 abd 2020-03-14 11:49:09 4 00001 2020-03-15 10:45:52 5 abf 2020-03-15 10:42:50
所以,最后更新/添加的数字是“00001”,下一个数字需要是“00002”
我试过这个:
$latestByUpdatedDate = Invoice::latest('updated_at')->first();
$latestByNumber = Invoice::latest('number')->first();
if($latestByUpdatedDate > $latestByNumber){
return ++$latestByUpdatedDate->number;
}
return ++$latestByNumber->number;
如果 $latestByUpdatedDate 和 $latestByNumber 仅是字符或仅是数字,则所有工作都很好,如果尝试将 00001 与 abc 进行比较,结果将是错误的。
解决方案
推荐阅读
- python - 使用 OpenCV 从桌面游戏卡图像中提取艺术品
- python - 在 Property 类创建代码中 self 指的是什么?
- python - bash:django-admin:找不到命令
- python - 在 python 中读取 CSV 文件时保留引号
- c++ - 使用单个 if 条件表示真值表
- jquery - 当我输入表单时,如何让我的动态表创建新行?现在它会创建行,但每次点击都会创建一个新行
- sql - 如何将一个选择查询中的值用于联合中的另一个?
- cmake - 如何为 OpenMP 配置 CMakeLists.txt?
- javascript - 如何使用方法更新 this.state?
- clojurescript - 如何将 ClojureScript 包含到 HTML 页面中?