Laravel: генерация простого уникального серийного номера - PullRequest
0 голосов
/ 13 октября 2019

У меня очень простой запрос. Я хочу создать серийный номер для каждого клиента, но с определенным шаблоном, например

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

Просто так

1 Ответ

2 голосов
/ 14 октября 2019

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];

}

Код написан без попыток, просто у меня в голове, но вы поняли.

...