检查唯一-laravel

时间:2018-10-03 19:34:07

标签: laravel function random unique

当用户注册时,每个用户都会收到存储在数据库中的七位数代码。每个代码必须唯一,并且不能再次创建。 如何确保每个存储的代码都是唯一的,并且在创建现有代码时不会出现错误消息?

功能

 $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 :(得分:2)

我会在while循环中使用doesntExist

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

答案 1 :(得分:0)

使用firstOrCreate()函数。

文档:https://laravel.com/docs/5.7/eloquent#other-creation-methods