代码之家  ›  专栏  ›  技术社区  ›  mafortis

拉瓦维尔中的自动递增数

  •  0
  • mafortis  · 技术社区  · 5 年前

    我有一段代码可以让订单号 $order->order_no = 'TXT'.date('Ymd').'001'; 这只会产生如下结果: TXT20190213001 我的问题是如何 001 部分动态,以便像 001 002 003 等等?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Mihir Bhende    5 年前
    // Get the last order id
    $lastorderId = Order::orderBy('id', 'desc')->first()->order_no;
    
    // Get last 3 digits of last order id
    $lastIncreament = substr($lastorderId, -3);
    
    // Make a new order id with appending last increment + 1
    $newOrderId = 'TXT' . date('Ymd') . str_pad($lastIncreament + 1, 3, 0, STR_PAD_LEFT)
    

    但是,这将使您拥有最多999个号码。您每天可以有001-999个订单,因此您每天最多可以有999个订单,一天的增量不超过3位数。

    要简化:

    可以使用表的自动递增主键并向其添加前导零。

    $orderStmt = DB::select("SHOW TABLE STATUS LIKE 'orders'");
    $nextPrimaryKeyId = $orderStmt[0]->Auto_increment;
    
    Now you can add leading zeros : 
    
    $nextPrimaryKeyId = str_pad($nextPrimaryKeyId, 6, 0);
    // Above will make increment id 23 as 000023
    

    然后在新订单中使用。

    或…你可以用uuid package 完成同样的任务。