LaravelでDBの重複エラー「SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry...」

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の場合は戻った画面にエラーメッセージが表示するようにしています。

  

laravel

Posted by Nakamoto