在blade表单中,我从数据库中获得最新/最高的数字,并在创建新数据时将其添加1:
<input type="number" min="0" class="form-control @error('ir_number') is-invalid @enderror" name="ir_number" placeholder="IR Number"
value="{{ DB::table('cases_reports')->get('ir_number', $report->ir_number)->max('ir_number') + 1 }}"/>它的工作原理是应该的,但我如何才能指定首先填补数字之间的空白呢?
e.g. 1 - 5. create 2, 3, 4 first before creating 6
另外,有时用户删除一个记录,我如何也填写那个被删除的数字然后继续计数?
发布于 2022-09-19 10:16:37
不建议重用标识符、主auto_increment或不重用。该值应该表示单个entity的唯一标识,并且回收值不可避免地会引起冲突/混淆。
考虑一下您的发票方案。有人生成一张发票,该发票被分配给非数据库派生的ir_number of 001。生成了更多的发票,现在您在005。删除了带有ir_number 003的发票,但是已经生成了该发票,因此有人有一个带有该ir_number的发票。
生成一个新的发票,您的应用程序确定003是可重用的,因此将这个新发票指定为ir_number of 003。现在您有了两张发票,它们具有相同的ir_number。那么,如果有人关心发票003,那是哪一个呢?
另外,考虑同时生成两个发票的场景。这可能导致死锁/争用条件,试图退出或使用下一个可用的ir_number。您可以在创建之前和期间进行一些验证和/或其他检查,但这是额外的工作。
考虑一下您正在尝试实现的目标,重用ir_number真的有意义吗?
https://stackoverflow.com/questions/73764582
复制相似问题