2015-01-10 10 views
6

Laravelで一意のフィールドエラーのために例外をスローするときに、雄弁を使ってレコードを挿入するときを特定しようとしています。Laravel catch Eloquent "Unique"フィールドエラー

私がこれまで持っているコードは次のとおりです。

try { 

    $result = Emailreminder::create(array(
         'user_id' => Auth::user()->id, 
         'email' => $newEmail, 
         'token' => $token, 
      )); 

} catch (Illuminate\Database\QueryException $e) { 
    return $e; 
} 

それは私がちょうど列の重複エラーとしてそれを識別するために何をすべきか分からないOK例外がスローされますか?

ありがとう、

Gavin。

+0

初めてコードを追加する方法は次のとおりです。ごめんなさい! – Gavin

+1

Eloquentの主な利点の1つは、特定のデータベースに固有のコードではないため、最初にこのエラーをスローすることは望ましくありません。使用しているデータベースに基づいてそれをキャッチするには、別の実装が必要になる可能性があります。これをコード化する適切な方法は、レコードがデータベースにあるかどうか最初にチェックしてそこで処理することです。 – TonyArra

答えて

22

私はそれが他のシステムのために、おそらくduplicate entry is 1062ため

オーケーまず、エラーコード違う、MySQLを使用と仮定しています。例外からエラーコードを取得する方法は次のとおりです。

catch (Illuminate\Database\QueryException $e){ 
    $errorCode = $e->errorInfo[1]; 
    if($errorCode == 1062){ 
     // houston, we have a duplicate entry problem 
    } 
} 
+0

おかげで、私はおかげでやった。 @ TonyArraはEloquentがDBに依存しないことについてのポイントを持っていますが。私がラウンドする方法は、Laravels独自の検証ルールを使用することでした。問題のテーブルは元の情報が入っていたテーブルとは異なるテーブルなので、私は面倒な複数の検証文を書いていました。だから私は自分自身に尋ねます。私はLaravelのDBの独立性に関わっているのでしょうか、それともMySQLよりも他のDBを使うことは決してないでしょう。うーん..... – Gavin