質問編集履歴

1

コードを一部修正

2024/03/06 12:59

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -1,209 +1,104 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-
4
-
5
3
  - laravel6.0
6
-
7
4
  - ``php artisan ui vue --auth``コマンドでユーザー認証機能を実装済
8
-
9
5
  - ログイン中のユーザーが自分のユーザー名やメールアドレスを編集(更新)できるようにしている
10
6
 
11
7
 
12
8
 
13
-
14
-
15
-
16
-
17
9
  変更後のメールアドレスが、もしほかのユーザーにより既にテーブル(usersテーブル)に登録されている値なら
18
-
19
10
  バリテーション等で「このメールアドレスは既に登録されています」
20
-
21
11
  のようなメッセージを出せるようにしたいです。
22
12
 
23
-
24
-
25
13
  例えばtwitterなどで、自分のメールアドレスを
26
-
27
14
  「ほかのユーザーが使っているメールアドレス」に変更しようとしたら
28
-
29
15
  それを知らせるメッセージが出ると思います。
30
-
31
- ![イメージ説明](5b5aa522f8cd0f51403b87458aabe7ce.png)
32
-
33
-
34
-
35
-
36
16
 
37
17
 
38
18
 
39
19
  ### 発生している問題・エラーメッセージ
40
-
41
20
  ユーザー情報編集画面で、ログインユーザーのメールアドレスを
42
-
43
21
  「すでにほかのユーザーが登録しているメールアドレス」
44
-
45
22
  に変更しようとすると、laravelのエラーが表示されます。
46
-
47
23
  ```
48
-
49
24
  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)
50
-
51
25
  ```
52
26
 
53
27
 
54
28
 
55
-
56
-
57
-
58
-
59
29
  ### 該当のソースコード
60
-
61
30
  ↓ユーザー情報編集ぺージのビュー(mypage.blade.php)
62
-
63
31
  ```php
64
-
65
32
  {{$aftername ?? Auth::user()->name}}さんのアカウント情報</h1>
66
-
67
33
  <form id="search_form" action="{{url('/mypage')}} " method="post">
68
-
69
34
  @csrf
70
-
71
35
  <table class="table">
72
-
73
36
  <tbody>
74
-
75
37
  <tr>
76
-
77
38
  <th scope="row" style="width:%">ユーザーID</th>
78
-
79
39
  <td style="width:%">{{ Auth::user()->id }}</td>
80
-
81
40
  <td></td>
82
-
83
41
  </tr>
84
-
85
42
  <tr>
86
-
87
43
  <th scope="row">ユーザー名</th>
88
-
89
44
  <td> <input type="text" id="name" name="name" value="{{$aftername ?? Auth::user()->name}}"
90
-
91
45
  required="required" autocomplete="name" autofocus="autofocus" class="form-control"></td>
92
-
93
46
  <td></td>
94
-
95
47
  </tr>
96
-
97
48
  <tr>
98
-
99
49
  <th scope="row">メールアドレス</th>
100
-
101
50
  <td>
102
-
103
51
  <input id="email" type="email" name="email" value="{{$afteremail ?? Auth::user()->email }}" required="required" autocomplete="email" autofocus="autofocus" class="form-control ">
104
-
105
52
  </td>
106
-
107
53
  <td></td>
108
-
109
54
  </tr>
110
-
111
55
  <tr>
112
-
113
56
  <th scope="row">アカウント登録日</th>
114
-
115
57
  <td>{{Auth::user()->created_at->format('Y年m月d日') }}</td>
116
-
117
58
  <td>
118
-
119
59
  </td>
120
-
121
60
  </tr>
122
-
123
61
  <th scope="row"></th>
124
-
125
62
  <td></td>
126
-
127
63
  <td><button class="btn btn-outline-secondary" type="submit" id="">送信</button></td>
128
-
129
64
  </tr>
130
-
131
65
  </tbody>
132
-
133
66
  </table>
134
-
135
67
  </form>
136
-
137
68
  ```
138
-
139
69
  ↓コントローラー(UserController.php)
140
-
141
70
  ```php
142
-
143
71
  public function myPageUpdate(Request $request,User $user)
144
-
145
72
  {
146
-
147
73
  $user =Auth::user();
148
-
149
74
  $aftername = $request->input('name');
150
-
151
75
  $afteremail = $request->input('email');
152
-
153
-
154
76
 
155
77
  $user_record = User::where('id', $user->id);
156
78
 
157
-
158
-
159
79
  $user_record->update(['name' => $request->name]);
160
-
161
80
  $user_record->update(['email' => $request->email]);
162
-
163
81
  return view('mypage')->with('aftername', $aftername)->with('afteremail', $afteremail);
164
-
165
82
  }
166
-
167
83
  ```
168
84
 
169
-
170
-
171
85
  ### 試したこと
172
-
173
86
  例えばlocalhost/registerでは、既に登録されているメールアドレスを入力するとバリテーションでメッセージを出してくれます。
174
-
175
- ![イメージ説明](50e1846696297d2c7e2f8a664f7f2579.png)
176
-
177
87
 
178
88
 
179
89
  そのため、この部分をつかさどるであろうビューファイル「register.blade.php」の
180
-
181
90
  ```php
182
-
183
91
  <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
184
92
 
185
-
186
-
187
93
  @error('email')
188
-
189
94
  <span class="invalid-feedback" role="alert">
190
-
191
95
  <strong>{{ $message }}</strong>
192
-
193
96
  </span>
194
-
195
97
  @enderror
196
-
197
98
  ```
198
-
199
99
  をユーザー情報編集ブレード(mypage.blade.php)のメールアドレスの部分に移植してみましたが、結果は同じでした。
200
-
201
-
202
100
 
203
101
  よい方法があれば知恵を貸していただきたいです。
204
102
 
205
-
206
-
207
103
  ### 補足情報(FW/ツールのバージョンなど)
208
-
209
104
  laravel6.0