Проверить уникальность - laravel

Когда пользователь регистрируется, каждый пользователь получает семизначный код, хранящийся в базе данных. Каждый код должен быть уникальным и не должен создаваться повторно. Как я могу гарантировать уникальность каждого сохраненного кода и отсутствие сообщений об ошибках при создании существующего кода?

Функция

 $randomstring = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyz"), 0, 7);

Стол

Schema::create('invites', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned()->nullable();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->text('greeting')->nullable();
            $table->string('url')->unique();
            $table->timestamps();
        });

Какое отношение имеет семизначный код к пользователю? Можно ли использовать код более одного раза?

adam 03.10.2018 21:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
1
92
2

Ответы 2

Используйте функцию firstOrCreate().

Документы: https://laravel.com/docs/5.7/eloquent#other-creation-methods

Я бы использовал doesntExist в цикле while:

while (true) {
    $randomstring = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyz"), 0, 7);
    if (Invite::where('code', $randomstring)->doesntExist()) {
        Invite::create([
            ...
            'code' => $randomstring,
            ...
        ]);
        break;
    }
}

Что делать с вашим кодом, если сгенерированный код существует?

slickness 03.10.2018 21:45

Он просто продолжает зацикливаться и создавать новые случайные строки, пока не создаст несуществующую.

DigitalDrifter 03.10.2018 21:46

я получаю сообщение об ошибке: вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: doesntExists ()

slickness 04.10.2018 19:03

могу я также использовать: if (Invite :: where ('url', '! =', $ randomstring))

slickness 04.10.2018 19:18

Это doesntExist(), а не doesntExists()

DigitalDrifter 04.10.2018 21:07

Я получаю ту же ошибку. Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: doesntExist ()

slickness 06.10.2018 17:38

Другие вопросы по теме