проверьте уникальность - laravel - PullRequest
0 голосов
/ 03 октября 2018

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

Функция

 $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();
        });

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

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

while (true) {
    $randomstring = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyz"), 0, 7);
    if (Invite::where('code', $randomstring)->doesntExist()) {
        Invite::create([
            ...
            'code' => $randomstring,
            ...
        ]);
        break;
    }
}
0 голосов
/ 03 октября 2018

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

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

...