Уникальный код по таблице

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Уникальный код по таблице

Сообщение Ghost_nsk »

Товарищи, привет. Интересует такой вопрос, есть таблица в базе, там какие-то данные. У каждой записи таблицы, есть какой-то уникальный параметр, например, code (varchar 10). Как при создании новой записи, автоматически генерить запись c code, который не похож на другие (уникален)?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Уникальный код по таблице

Сообщение ElisDN »

bin2hex(random_bytes(5)) с проверкой по БД на уникальность.

А если длина не критична, то лучше Ramsey\Uuid::uuid4()->toString().
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Уникальный код по таблице

Сообщение Ghost_nsk »

ElisDN писал(а): 2019.10.21, 09:23 bin2hex(random_bytes(5)) с проверкой по БД на уникальность.

А если длина не критична, то лучше Ramsey\Uuid::uuid4()->toString().
насколько я понимаю, если в rules добавить unique валидатор, он просто не пропустит модель при сохранении, если будет дубликат по ключу? или я неправильно понимаю?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Уникальный код по таблице

Сообщение ElisDN »

Да, форма не сохранится и придётся отправлять снова.
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Уникальный код по таблице

Сообщение Ghost_nsk »

ElisDN писал(а): 2019.10.21, 09:54 Да, форма не сохранится и придётся отправлять снова.
это я понимаю, но мне нужно, чтобы форма сохранилась 100%, то есть если код уже есть в базе, видимо как-то в цикле проверять надо, пока не будет найден код, которого в базе нет. Насколько это костыльно?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Уникальный код по таблице

Сообщение ElisDN »

Про это и говорю, что в случае своих коротких кодов генерировать нужно сразу с проверкой уникальности:

Код: Выделить всё

do {
    $code = bin2hex(random_bytes(5));
} while (Entity::find()->andWhere(['code' => $code])->exists())
А если использовать длинный UUID, то проверка не нужна.
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Уникальный код по таблице

Сообщение Ghost_nsk »

ElisDN писал(а): 2019.10.21, 11:13 Про это и говорю, что в случае своих коротких кодов генерировать нужно сразу с проверкой уникальности:

Код: Выделить всё

do {
    $code = bin2hex(random_bytes(5));
} while (Entity::find()->andWhere(['code' => $code])->exists())
А если использовать длинный UUID, то проверка не нужна.
примерно так и думал, спасибо
Ответить