前提・実現したいこと
ユーザーがアカウント登録した時に他のレコードと重複しない固有のStr.random()で文字列を生成し、createメソッドが登録ができなかったら再度文字列を生成しcreate()を試みる、それも登録ができなければ同じことを登録できるまで繰り返す、という処理を作りたいです。認証機能はLaravel Breezeを使っています。
usersテーブルのuniqueキーが設定されたuseridカラムがランダム文字列の登録用カラムです。RegisteredUserController.phpのcreate()に'userid' => Str::random(15)を指定することでランダム文字列を登録することができるところまではわかったのですが、createメソッドで登録ができなかった場合、できるまでcreateメソッドを繰り返す処理の作り方がわかりません。while文を使うのではないかと思ったのですが、それ以上は思い浮かびませんでした。
該当のソースコード
RegisteredUserController.php
1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Http\Controllers\Controller; 6use App\Models\User; 7use App\Providers\RouteServiceProvider; 8use Illuminate\Auth\Events\Registered; 9use Illuminate\Http\Request; 10use Illuminate\Support\Str; 11use Illuminate\Support\Facades\Auth; 12use Illuminate\Support\Facades\Hash; 13use Illuminate\Validation\Rules; 14 15class RegisteredUserController extends Controller 16{ 17 /** 18 * Display the registration view. 19 * 20 * @return \Illuminate\View\View 21 */ 22 public function create() 23 { 24 return view('auth.register'); 25 } 26 27 /** 28 * Handle an incoming registration request. 29 * 30 * @param \Illuminate\Http\Request $request 31 * @return \Illuminate\Http\RedirectResponse 32 * 33 * @throws \Illuminate\Validation\ValidationException 34 */ 35 public function store(Request $request) 36 { 37 $request->validate([ 38 'name' => ['required', 'string', 'max:255'], 39 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 40 'password' => ['required', 'confirmed', Rules\Password::defaults()], 41 ]); 42 43 $user = User::create([ 44 'name' => $request->name, 45 'email' => $request->email, 46 'password' => Hash::make($request->password), 47 'icon' => '', 48 'userid' => Str::random(15), 49 ]); 50 51 event(new Registered($user)); 52 53 Auth::login($user); 54 55 return redirect(RouteServiceProvider::HOME); 56 } 57}
補足情報(FW/ツールのバージョンなど)
Laravel 8.79.0
PHP 8.1.1
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/17 11:25