【发布时间】:2022-08-16 21:30:39
【问题描述】:
每当用户在我们的 laravel 应用程序上插入发票时,它都会为相应的发票编号。因此,如果他们输入第一张发票,那么它将是发票 1,第二张发票将是发票 2,依此类推
数字 (1, 2, 3, ..., x) 基本上是 id(它是 invoices 表的主键)。但是现在假设有 30 张发票,他想删除第 25 张,下一张将插入的不是 25,而是 31,因为它在表中创建了一条新记录, 它应该是 25 因为那是缺少的那个
我的问题是,如何自动将发票的下一个编号设置为丢失的第一个?我有一种感觉,我应该创建一个新列来指示发票的编号。这是创建发票的代码:
$invoice = new \\App\\Models\\Invoice();
$invoice->provider_id = $request->input(\'provider-select\');
$invoice->number = $request->input(\'document-number\');
$invoice->document_date = $request->input(\'document-date\');
$invoice->due_date = $request->input(\'due-date\');
$invoice->discount_procent = $request->input(\'discount-procent\');
$invoice->discount_value = $request->input(\'discount-value\');
$invoice->total = $request->input(\'total-value\');
$invoice->insertion_date = $request->input(\'insertion-date\');
$invoice->save();
我是否应该创建一个名为numbering 的新列并按升序为每张发票分配一个编号,当一张发票被删除时,检测到丢失的那张,然后为下一张发票分配编号并按@过滤它们987654323@ 而不是id?
-
如果那是您要采用的逻辑,那么添加一个新字段是最好的,您将无法更改 pk 自动增量字段(如 ID),而不会破坏任何将该 PK 引用为 FK 的表。即使您现在没有引用它的表,将来也可以。 (pk - 主键) (fk - 外键)
-
如果您想保持顺序,在表上放置一个删除标志字段(默认为 0,如果已删除,则为 1)可能会更好/更容易,因为您的显示查询只是不显示带有删除标志的行放。然后,当您要插入新行时,按 id asc limit 1 快速查询 deleteflag = 1 order,如果您有一行,只需更新所有字段,如果您不插入新行。