Я хотел бы создать уникальные идентификаторы, что-то вроде dujUSJue9389sjgjik
.PHP и Doctrine: как создать уникальные идентификаторы
Я использовал стратегию Doctrine UUID
, чтобы создать их, но в результате получилось что-то вроде d9c363ae-a1b7-11e6-a66d-9e9923e30d94
: Мне не нравятся тире, а также я хотел бы иметь более короткие идентификаторы.
Им нужно идентифицировать некоторые объекты для создания URL-адреса, например http://example.com/entity/hduicw43tv43bic
.
Использование PHP uniqid()
не гарантирует уникальность сгенерированного значения. Я думаю, что конфликт очень редок, но, во всяком случае, не исключается вообще, поэтому я не рассматриваю его как «безопасный» (конфликт может вызвать исключение, а создание строк может вызвать много головной боли для исправления).
Итак, используя Doctrine и Symfony, я ищу способ генерировать значение, например ajybUYBD74883bj8d74NJ
, и проверить его уникальность. Если он уже присутствует, необходимо создать новое значение. Когда объект имеет уникальное значение, он может быть сохранен. Генерация должна произойти, когда объект создается.
Любые идеи о том, как реализовать это?
Не существует реального уникального алгоритма генерации значений, который гарантирует уникальность, включая UUID/GUID. –
Да, я знаю об этом. Для этого я ищу процедуру проверки уникальности и сбоя (сгенерированный идентификатор уже существует) регенерирует его.Это должно быть сделано в сущности Doctrine. – Aerendir
Это должно быть сделано в самом сущности. Это не задача сущности проверять другие объекты (включая репозиторий вызовов). Это должно быть работа генератора ID. Вы можете попытаться создать собственный генератор идентификаторов, но я не могу найти документацию об этом. Во всяком случае, вот пример в ответе psylosss: http://stackoverflow.com/questions/15039665/generate-unique-id-doctrine-symfony2 –