我想编写一个函数来为数据库中的条目生成i。当数据被创建时,一个格式的ID:
应该创建R-20150401-1 .
我已经得到了前两个组件。但不断增加的数量对我来说仍然是个问题。将在一个表单中生成门票,我不想限制可以生成的票的数量。因此,我认为for循环没有意义。
这是我现在的代码
public function generateTicketReferenceID() {
$incidentTypeID = "R";
$date = Carbon::now()->format('Ymd');
$incidentID = 0;
echo $incidentTypeID . "-" . $date . "-" . ++$incidentID;
}
}要回答评论中的问题:
我只是在想,如果一个票务系统从每天的ID开始,以及当不同的用户登录到系统时,是否是个好主意。因此,当应该创建ID R-001-20150401-1时,如何在以下条件下重置数字。
发布于 2015-04-02 17:57:19
要实现这一点,您需要在数据库中创建自己的序列,其方式类似于自动增量的工作方式。普通的自动售货机总是在顺序上出现空白,这是不可避免的。在英国,根据法律,增值税发票号码必须是连续的。这样就不会有税务欺诈的问题。在面对这一挑战时,我使用以下过程。
创建一个表来保存最后发出的ID。只有一个字段和一行。当您需要一个新的数字:锁定用于读和写的表时,确保事务隔离不允许其他进程读取该表。这取决于db和表类型。在php中将数字增加1。使用插入到发票表中的新数字。然后用新的数字更新序列表。然后提交事务并释放锁。然后,下一个进程也可以这样做。
https://dev.mysql.com/doc/refman/5.0/en/set-transaction.html
发布于 2015-04-02 17:39:57
您将需要一种方法来知道以前的id是否存在,以及它是什么,以生成一个增量ID。
发布于 2015-04-02 17:44:48
在数据库中,将日期(时间戳)保存在一个字段中,并将自动递增值作为主键。然后数据库会自动处理这一切。
每次要打印事件ID时,都要从SQL行生成它:"R-“+ id + date。
https://stackoverflow.com/questions/29419070
复制相似问题