【问题标题】:Issue with same order number generation生成相同订单号的问题
【发布时间】:2019-06-23 15:09:59
【问题描述】:

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

我们正在为订单号生成九位 uniqid,同时我们正在对照数据库检查新生成的#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;

基本上,我们需要在并发用户完成结帐过程时为订单号提供唯一的 slug。

【问题讨论】:

    标签: php doctrine symfony-2.3


    【解决方案1】:

    您的脚本从时间戳生成唯一的 slug,但数字太大(16 位)并且您只取前 10 位数字,这就是为什么当超过 1 个用户在访问购物车时具有相同的 id 时 slug 是相同的短时间内。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2019-05-02
      相关资源
      最近更新 更多