首页 > 解决方案 > 按 Laravel PHP/MYSQL 中添加数字的最后日期递增唯一的 INVOICE 编号

问题描述

我需要按添加编号的最后日期生成唯一的递增发票编号(字符串)。发票号码没有默认格式,用户可以自由注册任何他想要的字符串。示例:00001、abc、EP-2018/00005..等。

好的,需要怎么工作?如果用户注册字符串 0001 作为发票编号,则在“添加新发票”页面上,需要显示下一个递增编号,在这种情况下将为 0002。如果用户使用字符串 abc 作为发票编号注册发票,则在页面“添加新发票”,需要显示abd。因此,如您所见,取决于添加号码的最后日期,因为第二个字符串是 abc,现在我们在“添加新发票”页面上看到 abd 是下一个唯一号码。

另一个例子,这里的工作变得非常复杂:如果在 db 中我们已经有编号为“abd”的发票而且这很旧,那么我们需要获取下一个递增编号,这是“abe”。

数据库表发票

示例 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 进行比较,结果将是错误的。

标签: phpmysqllaraveluniqueinvoice

解决方案


推荐阅读