Как сгенерировать уникальное значение автоматического приращения для каждого пользователя в laravel и добавить его в базу данных - PullRequest
0 голосов
/ 09 октября 2019

Я занимаюсь разработкой сайта организации мероприятий. Здесь, когда пользователь регистрируется на событие, ему дается уникальное случайное число (10 цифр), которое мы используем, чтобы сгенерировать штрих-код и отправить его ему по почте. Теперь,

  1. Я хочу сделать число уникальным для каждого зарегистрированного события.
  2. А также автоматическое увеличение Одно из решений состоит в том, чтобы собрать все числа автоматического увеличения в массиве и сгенерировать автоматическоечисло приращения с использованием laravel принимает форму (от 0000000001 до 9999999999) и проходит через все значения. Возьмите первое значение, которое не равно ни одному из значений в массиве, и добавьте его в базу данных.

Но я думаю, что может быть лучшее решение для этого. Любое предложение?

Ответы [ 4 ]

1 голос
/ 09 октября 2019

Я предлагаю простое решение на основе меток времени с использованием класса Carbon для получения уникального числа с использованием метки времени. Довольно просто создать базовую уникальную и случайную печать штампов, используя timestamp. Вы можете использовать, как указано ниже,

use Carbon\Carbon;
$current_timestamp = Carbon::now()->timestamp; // Produces something like this 1552296328

Вы можете использовать его как уникальный идентификатор. Если вы хотите следующие цифры, просто +1. Но имейте в виду, вы должны своевременно управлять другой партией номеров. (т. Е. Если вы сгенерировали 500 чисел на данный момент с приращением, вы не должны генерировать другое число в течение следующих 500 секунд. В противном случае оно будет повторяться) . Если вы хотите узнать больше, вы можете прочитать здесь .

Решение с функцией rand () может не работать здесь, потому что оно может воспроизвести существующее числов базе данных, и вы будете допущены ошибки для Нарушение уникальных ограничений (т.е. если у вас есть уникальный столбец в БД).

1 голос
/ 09 октября 2019

Выберите Максимальное число, хранящееся в вашей БД, и добавьте в него 1, например:

SELECT (MAX(Column_Name)+1) AS Max_val FROM Table_Name;
0 голосов
/ 09 октября 2019

MySQL UUID даст вам действительно уникальный: Храните UUID v4 в MySQL

Вам не нужно беспокоиться об автоинкременте.

0 голосов
/ 09 октября 2019

Независимо от того, какой подход вы используете, он никогда не будет действительно случайным. Это будет PRNG . Для вашего случая, я думаю, что автоматического увеличения с нулевой заливкой должно быть достаточно.

Но если вы используете случайное число, тогда вам достаточно использовать функцию rand () PHP. 10 цифр означает 10000000000 уникальных чисел. Если в вашем проекте нет миллионов событий, с ним проблем быть не должно. Итак, подход 1 не должен быть проблемой. Кроме того, после генерации любого случайного числа вы можете проверить, присутствует ли это число (есть 0,000001% или что-то в этом роде). Если он присутствует, попробуйте снова сгенерировать случайное число.

Но если ваш проект станет очень успешным (например, миллионы событий), проблемы, подобные Y2K , могут возникнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...