当用户注册时,每个用户都会收到存储在数据库中的七位数代码。每个代码必须唯一,并且不能再次创建。 如何确保每个存储的代码都是唯一的,并且在创建现有代码时不会出现错误消息?
功能
$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();
});
答案 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