Laravel捕获Eloquent"Unique"字段错误

Gav*_*vin 21 php laravel laravel-4

我试图识别何时在Laravel中使用eloquent插入记录时由于唯一字段错误而抛出异常.

我到目前为止的代码是:

try {

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

} catch (Illuminate\Database\QueryException $e) {
    return $e;
}
Run Code Online (Sandbox Code Playgroud)

抛出异常OK我只是不知道如何将其识别为列重复错误?

谢谢,

加文.

luk*_*ter 47

我假设你使用MySQL,它可能与其他系统不同

好的,首先,重复条目的错误代码是1062.以下是从异常中检索错误代码的方法:

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

  • 在Laravel 5.6中,我必须在classname之前添加一个前导斜杠,如下所示:\ Illuminate\Database\QueryException (4认同)

Ami*_*agh 6

在类 Handler 中添加此代码(例外)

if($e instanceof QueryException){
        $errorCode = $e->errorInfo[1];          
        switch ($errorCode) {
            case 1062://code dublicate entry 
                return response([
                    'errors'=>'Duplicate Entry'
                ],Response::HTTP_NOT_FOUND);    
                break;
            case 1364:// you can handel any auther error
                return response([
                    'errors'=>$e->getMessage()
                ],Response::HTTP_NOT_FOUND);                        
                break;      
        }
     }
    ...
    return parent::render($request, $exception);
Run Code Online (Sandbox Code Playgroud)