php - laravel中的自动递增数字
问题描述
我有一段代码可以使这样的订单号$order->order_no = 'TXT'.date('Ymd').'001';
简单地产生如下结果:TXT20190213001
我的问题是如何使001
零件动态化以增加它001
002
003
等等?
解决方案
// 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 fo,因此您每天最多可以有 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包来完成相同的操作。
推荐阅读
- python - 两个列表之间的距离相似度
- javascript - 使用 undescore.js,我正在尝试将给定的输入格式化为预期的输出
- sql - 如何在 Firebird 的限制视图上授予用户 SELECT
- node.js - Heroku:显示 json 数据而不是 UI
- autodesk-forge - 在 Forge 查看器中识别上传的 Revit 模型中的只读参数
- reactjs - React Native Axios -> 等待异步响应,如果为真则导航到新页面
- angular9 - 升级到angular 9时的three.js错误
- jenkins - 在 groovy 中创建命名步骤
- python - Python有条件地记录到不同的目的地
- .net-core - 在始终使用加密和弹性规模的 .netcore 应用程序上迁移