前提・実現したいこと
ユーザーがアカウント登録した時に他のレコードと重複しない固有のStr.random()で文字列を生成し、createメソッドが登録ができなかったら再度文字列を生成しcreate()を試みる、それも登録ができなければ同じことを登録できるまで繰り返す、という処理を作りたいです。認証機能はLaravel Breezeを使っています。
usersテーブルのuniqueキーが設定されたuseridカラムがランダム文字列の登録用カラムです。RegisteredUserController.phpのcreate()に'userid' => Str::random(15)を指定することでランダム文字列を登録することができるところまではわかったのですが、createメソッドで登録ができなかった場合、できるまでcreateメソッドを繰り返す処理の作り方がわかりません。while文を使うのではないかと思ったのですが、それ以上は思い浮かびませんでした。
該当のソースコード
RegisteredUserController.php
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Models\User; use App\Providers\RouteServiceProvider; use Illuminate\Auth\Events\Registered; use Illuminate\Http\Request; use Illuminate\Support\Str; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules; class RegisteredUserController extends Controller { /** * Display the registration view. * * @return \Illuminate\View\View */ public function create() { return view('auth.register'); } /** * Handle an incoming registration request. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse * * @throws \Illuminate\Validation\ValidationException */ public function store(Request $request) { $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'confirmed', Rules\Password::defaults()], ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), 'icon' => '', 'userid' => Str::random(15), ]); event(new Registered($user)); Auth::login($user); return redirect(RouteServiceProvider::HOME); } }
補足情報(FW/ツールのバージョンなど)
Laravel 8.79.0
PHP 8.1.1
まだ回答がついていません
会員登録して回答してみよう