Уникальный идентификатор является важной частью нашего приложения. Кому-то нравится генерировать идентификатор приложения как автоматический инкрементальный, а кому-то нравится генерировать свой уникальный идентификатор в пользовательском формате. В этом посте я покажу вам, как сгенерировать пользовательский первичный ключ или любое поле вашей таблицы с пользовательским идентификатором с помощью пакета Laravel ID generator package .
Во-первых, установите пакет в вашем приложении Laravel.
composer require haruncpi/laravel-id-generator
Для того, чтобы воспользоваться, необходимо импортировать генератор
use Haruncpi\LaravelIdGenerator\IdGenerator;
Как пользоваться?
Вы должны передать ассоциативный массив в generate
функцию с table, length,prefix
ключом.
table
= Ваше имя таблицы.
field
= Необязательный. По умолчанию он работает с полем id. Вы также можете задать другие имена полей.
length
= Длина вашего идентификатора
prefix
= Определите свой префикс. Это может быть префикс года, месяца или любая пользовательская строка.
reset_on_prefix_change
= Необязательно, по умолчанию false. Если вы хотите сбросить идентификатор с 1 при изменении префикса, то установите его true.
Пример: 01
$config = [
'table' => 'todos',
'length' => 6,
'prefix' => date('y')
];
// now use it
$id = IdGenerator::generate($config);
// use within single line code
$id = IdGenerator::generate(['table' => 'todos', 'length' => 6, 'prefix' => date('y')]);
// output: 160001
Пример 02: INV-000001 для строки с префиксом.
$id = IdGenerator::generate(['table' => 'invoices', 'length' => 10, 'prefix' =>'INV-']);
//output: INV-000001
Пример 03: YYMM000001
$id = IdGenerator::generate(['table' => 'invoices', 'length' => 10, 'prefix' =>date('ym')]);
//output: 1910000001
Пример 04: по умолчанию этот пакет работает с полем ID. Вы можете установить другое поле для создания идентификатора. Убедитесь, что выбранное вами поле должно быть уникальным, а также правильным типом данных.
$id = IdGenerator::generate(['table' => 'products','field'=>'pid', 'length' => 6, 'prefix' =>date('P')]);
//output: P00001
Пример 05: по умолчанию этот пакет не сбрасывает Ваш идентификатор при изменении префикса идентификатора. Если вы хотите сбросить свой идентификатор с 1 при каждом изменении префикса, то пройдите reset_on_prefix_change => true
Сброс идентификатора ежегодно
$id = IdGenerator::generate(['table' => 'invoices', 'length' => 10, 'prefix' =>date('y')]);
//output: 2000000001,2000000002,2000000003
//output: 2100000001,2100000002,2100000003
Сброс идентификатора ежемесячно
$id = IdGenerator::generate(['table' => 'invoices', 'length' => 10, 'prefix' =>date('ym')]);
//output: 1912000001,1912000002,1912000003
//output: 2001000001,2001000002,2001000003
Или любое изменение префикса
$id = IdGenerator::generate(['table' => 'products', 'length' => 6, 'prefix' => $prefix]);
//output: A00001,A00002,B00001,B00002
Через Eloquent model
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->uuid = IdGenerator::generate(['table' => $this->table, 'length' => 10, 'prefix' =>date('ym')]);
});
}