Когда пользователь регистрируется, каждый пользователь получает семизначный код, хранящийся в базе данных. Каждый код должен быть уникальным и не должен создаваться повторно. Как я могу гарантировать уникальность каждого сохраненного кода и отсутствие сообщений об ошибках при создании существующего кода?
Функция
$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();
});






Используйте функцию 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;
}
}
Что делать с вашим кодом, если сгенерированный код существует?
Он просто продолжает зацикливаться и создавать новые случайные строки, пока не создаст несуществующую.
я получаю сообщение об ошибке: вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: doesntExists ()
могу я также использовать: if (Invite :: where ('url', '! =', $ randomstring))
Это doesntExist(), а не doesntExists()
Я получаю ту же ошибку. Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: doesntExist ()
Какое отношение имеет семизначный код к пользователю? Можно ли использовать код более одного раза?