在 MySQL 里创建一个带有自增列的表,使用 MEMORY ENGINE 存储即可。
利用时间生成字符串,后面再加上自增列生成的数字,根据业务容量仅取最后几位,示例代码仅取后4位。
<?php namespace app\api\service; /** * CREATE TABLE IF NOT EXISTS `order_id_seq` ( * id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, * PRIMARY KEY (`id`) * ) ENGINE=MEMORY AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; */ class OrderIdService { /** * Returns next order ID. * * @return string */ public function nextId() { $seq = $this->nextSeq(); $id = date('YmdHis') . sprintf('%04d', $seq % 10000); return $id; } /** * Returns next sequence number. * * @return number */ private function nextSeq() { $db = \think\Db::connect('db_platform'); $seq = $db->table('order_id_seq')->insertGetId(['id' => 0]); $db->table('order_id_seq')->where('id', $seq)->delete(); return $seq; } }