前提・実現したいこと
- laravel6.0
php artisan ui vue --auth
コマンドでユーザー認証機能を実装済- ログイン中のユーザーが自分のユーザー名やメールアドレスを編集(更新)できるようにしている
変更後のメールアドレスが、もしほかのユーザーにより既にテーブル(usersテーブル)に登録されている値なら
バリテーション等で「このメールアドレスは既に登録されています」
のようなメッセージを出せるようにしたいです。
例えばtwitterなどで、自分のメールアドレスを
「ほかのユーザーが使っているメールアドレス」に変更しようとしたら
それを知らせるメッセージが出ると思います。
発生している問題・エラーメッセージ
ユーザー情報編集画面で、ログインユーザーのメールアドレスを
「すでにほかのユーザーが登録しているメールアドレス」
に変更しようとすると、laravelのエラーが表示されます。
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'jono@gmail.com' for key 'users.users_email_unique' (SQL: update `users` set `email` = jono@gmail.com, `users`.`updated_at` = 2021-03-16 08:48:00 where `id` = 1)
該当のソースコード
↓ユーザー情報編集ぺージのビュー(mypage.blade.php)
php
1 {{$aftername ?? Auth::user()->name}}さんのアカウント情報</h1> 2 <form id="search_form" action="{{url('/mypage')}} " method="post"> 3 @csrf 4 <table class="table"> 5 <tbody> 6 <tr> 7 <th scope="row" style="width:%">ユーザーID</th> 8 <td style="width:%">{{ Auth::user()->id }}</td> 9 <td></td> 10 </tr> 11 <tr> 12 <th scope="row">ユーザー名</th> 13 <td> <input type="text" id="name" name="name" value="{{$aftername ?? Auth::user()->name}}" 14 required="required" autocomplete="name" autofocus="autofocus" class="form-control"></td> 15 <td></td> 16 </tr> 17 <tr> 18 <th scope="row">メールアドレス</th> 19 <td> 20 <input id="email" type="email" name="email" value="{{$afteremail ?? Auth::user()->email }}" required="required" autocomplete="email" autofocus="autofocus" class="form-control "> 21 </td> 22 <td></td> 23 </tr> 24 <tr> 25 <th scope="row">アカウント登録日</th> 26 <td>{{Auth::user()->created_at->format('Y年m月d日') }}</td> 27 <td> 28 </td> 29 </tr> 30 <th scope="row"></th> 31 <td></td> 32 <td><button class="btn btn-outline-secondary" type="submit" id="">送信</button></td> 33 </tr> 34 </tbody> 35 </table> 36 </form>
↓コントローラー(UserController.php)
php
1 public function myPageUpdate(Request $request,User $user) 2 { 3 $user =Auth::user(); 4 $aftername = $request->input('name'); 5 $afteremail = $request->input('email'); 6 7 $user_record = User::where('id', $user->id); 8 9 $user_record->update(['name' => $request->name]); 10 $user_record->update(['email' => $request->email]); 11 return view('mypage')->with('aftername', $aftername)->with('afteremail', $afteremail); 12 }
試したこと
例えばlocalhost/registerでは、既に登録されているメールアドレスを入力するとバリテーションでメッセージを出してくれます。
そのため、この部分をつかさどるであろうビューファイル「register.blade.php」の
php
1<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email"> 2 3@error('email') 4 <span class="invalid-feedback" role="alert"> 5 <strong>{{ $message }}</strong> 6 </span> 7@enderror
をユーザー情報編集ブレード(mypage.blade.php)のメールアドレスの部分に移植してみましたが、結果は同じでした。
よい方法があれば知恵を貸していただきたいです。
補足情報(FW/ツールのバージョンなど)
laravel6.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/27 06:51