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];
}
Код написан без попыток, просто у меня в голове, но вы поняли.