質問編集履歴
1
コードを一部修正
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
|