gpt4 book ai didi

php - MariaDB - 发票编号 - 每年返回0

转载 作者:行者123 更新时间:2023-11-29 05:50:50 25 4
gpt4 key购买 nike

你好,

我需要一些建议,因为我开发了一个生成报价和发票的 CRM(在 PHP/MariaDB 中)。

生成发票编号的最佳方法是什么(以便数据库中永远不会发生冲突 - 永远不会重复编号等)?

附言:我希望每年年初(1 月 1 日)重新开始将发票编号归零。并且 CRM 将被多个商店使用,我想为每个商店单独编号。

起初,我想我应该在我的订单表 (order_invoices) 中放置一个 number 列 (int)。在 PHP 中创建新发票时这样做(Eloquent de Laravel 示例):

$lastNumber = OrderInvoice::whereRaw(
'number = (
SELECT MAX(number) FROM order_invoices
)'
)
->first()
->number;

$orderInvoice = new OrderInvoice();
$orderInvoice->number = $lastNumber + 1;
// other... assigne values to others columns
$orderInvoice->save();

但经过反射(reflection),我不确定这是最好的解决方案(我在 CRM 上使用如此高流量的事务,并且多个成员同时验证一个命令......在账单编号递增中存在冲突的风险?)。

例如,我认识的一位开发人员建议我创建一个计数器 表。在这张表中:

_添加为列:idnumber(此列将递增以了解我们在编号中的位置)。

_在此表中,为每个商店放一行(行)。

_在我的程序中(我的 Controller 的操作),用于创建新发票:

_在发票生成开始时锁定一行(在商店行);

_从counters 表中检索number,并将此值插入(带+1)到invoice 表的number (order_invoices);

你怎么看?您还有其他想法和建议吗?

非常感谢。

最佳答案

仅模式:

数据库成员:

  • main_id自增主键
  • index_of_year
  • 唯一键(年份,index_of_year)

进度:

  • 插入带有年份的元素,将 index_of_year 设置为 NULL
  • 获取最后插入的 ID 作为 CUR_ID
  • 更新记录的index_of_year为max+1

关于php - MariaDB - 发票编号 - 每年返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com