Уникальный код по таблице
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Уникальный код по таблице
Товарищи, привет. Интересует такой вопрос, есть таблица в базе, там какие-то данные. У каждой записи таблицы, есть какой-то уникальный параметр, например, code (varchar 10). Как при создании новой записи, автоматически генерить запись c code, который не похож на другие (уникален)?
Re: Уникальный код по таблице
bin2hex(random_bytes(5)) с проверкой по БД на уникальность.
А если длина не критична, то лучше Ramsey\Uuid::uuid4()->toString().
А если длина не критична, то лучше Ramsey\Uuid::uuid4()->toString().
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: Уникальный код по таблице
насколько я понимаю, если в rules добавить unique валидатор, он просто не пропустит модель при сохранении, если будет дубликат по ключу? или я неправильно понимаю?
Re: Уникальный код по таблице
Да, форма не сохранится и придётся отправлять снова.
Re: Уникальный код по таблице
Про это и говорю, что в случае своих коротких кодов генерировать нужно сразу с проверкой уникальности:
А если использовать длинный UUID, то проверка не нужна.
Код: Выделить всё
do {
$code = bin2hex(random_bytes(5));
} while (Entity::find()->andWhere(['code' => $code])->exists())
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: Уникальный код по таблице
примерно так и думал, спасибоElisDN писал(а): ↑2019.10.21, 11:13 Про это и говорю, что в случае своих коротких кодов генерировать нужно сразу с проверкой уникальности:
А если использовать длинный UUID, то проверка не нужна.Код: Выделить всё
do { $code = bin2hex(random_bytes(5)); } while (Entity::find()->andWhere(['code' => $code])->exists())