【问题标题】:Laravel : Generate Simple Unique Serial NumberLaravel:生成简单的唯一序列号
【发布时间】:2023-12-01 08:33:02
【问题描述】:

我有一个非常简单的查询,我想为每个客户生成一个序列号,但具有特定的模式,例如

    AAA-001
    ...
    ...
    AAA-999
    AAB-001
    ...
    ...
    ABA-999

就这样

【问题讨论】:

  • 到目前为止你尝试过什么?它们需要顺序吗?你能改用 UUID 吗?
  • var uid = (new Date().getTime()).toString(36).toUpperCase(); 我试过了,但客户很难记住,而且不是随机的。

标签: php laravel laravel-6


【解决方案1】:

PHP 支持递增字母字符串,所以代码如下:

$string = 'AAA';
$string++;
dump($string);

将输出AAB

您可以编写一个简单的辅助函数,从用户表中获取最后一个序列号,并将其递增并将其返回给新用户:

$user = new User;
$user->serial_number = $this->getSerialNumber();
$user->save();

...

public function getSerialNumber(): string
{
   $lastUsedSerialNumber = User::query()->orderByDesc('serial_number')->first();
   // explode by - so you have your tho sequences of the number
   $parts = explode('-', $lastUsedSerialNumber);
   // if second part is 999, increment first part, from AAB to AAC, and set 
   // second sequence to 000;
   if ((int) $parts[1] === 999) {
     $parts[0] = $parts[0]++;
     $parts[1] = 000;
   }
   // increment second sequence if lower than 999
   if ((int) $parts[1] < 999) {
      $parts[1] = str_pad(++$parts[1], 3, '0', STR_PAD_LEFT);
   }
   return $parts[0] . '-' . $parts[1];

}

代码是在没有尝试的情况下编写的,就在我的脑海中,但你明白了。

【讨论】:

  • 不起作用,它返回-001
最近更新 更多