Laravelでユーザー登録する際にユーザー登録はできたのですが以下のエラーが出てしまいました。
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry…
メールアドレスをuniqueにしたため同じメールアドレスが使われた際に重複していてエラーがかえってきてしまったようです。
条件分岐させて処理を分けようと思ったものの、どうやって分ければいいのか検討もつかず。1日費やしてしまいました。
create文での重複エラー
いろいろ割愛しますが、私は以下のようにcontroller.phpでcreate文でDBへデータを挿入していました。
Table_check::create([ // テーブルへ挿入
‘id’=> $id,
‘name’ => $request->name,
‘email’ => $request->email,
]);
return back(); // ページに戻る
create文はエラーの戻り値はobjectなので、true/falseではなかったので条件分岐をどうさせようか迷います。insert文ならtrue/falseが戻り値なのでinsert文で書くことも考えましたが、それはそれで初心者には難易度が高いのでなんとかcreateのままで重複エラーに対応させたいところです。
追加したコード
いろいろ試したところ以下でなんとか重複エラーを回避できました。
use DB; // 追加
*
*
*
// e-mailカラムでリクエストの値がテーブルに存在しているか確認
$exCheck = DB::table(‘テーブル名’)->where(‘email’, $request->email)->exists();
if(!($exCheck)){
Table_check::create([ // テーブルへ挿入
‘id’=> $id,
‘name’ => $request->name,
‘email’ => $request->email,
]);
return back(); // ページに戻る
}else{
return back()->withInput()->withErrors([$request->email => “Eメールアドレスはすでに使用されています”]);
}
elseの場合は戻った画面にエラーメッセージが表示するようにしています。