具有相同订单号生成的问题

时间:2019-01-30 10:53:10

标签: php doctrine symfony-2.3

我的应用程序是用symfony编写的,它具有一个在线结帐系统。通常,当两个或多个用户同时进行结帐时,它将生成相同的订单号。 结果,它在数据库中生成冗余,这可能导致不一致。

我们正在为订单号生成9位数的单数,同时我们正在针对数据库检查新生成的#id,以避免重复。

$slug = substr(hexdec(uniqid('', false)),0,9);
        while($this->_doctrine->getManager()->getRepository('ZACartBundle:Cart')->findOneBySlug($slug) != null){
            $slug = substr(hexdec(uniqid('', false)),0,9);
        }
        return $slug;

基本上,当并发用户执行结帐流程时,我们需要对订单号具有唯一的标记。

1 个答案:

答案 0 :(得分:0)

您的脚本会从时间戳生成唯一的段,但是数量太大(16位),并且您只输入前10位,这就是为什么当超过1个用户使用相同的ID来访问购物车时段相同的原因在短时间内。

您可以考虑获取最后10位数字来解决此问题:

$slug = substr(hexdec(uniqid('', false)), -10);