捕获查询异常?

时间:2016-11-30 14:56:19

标签: php laravel laravel-5 eloquent laravel-5.3

我的数据库中有一个slug列,它是唯一的。

如果我尝试使用非唯一的slug存储另一行,我会收到QueryException错误。

我发现错误,并希望返回一条错误信息,其中包含" slug存在"。

try {
    User::create($data);
} catch (\Illuminate\Database\QueryException $e) {
    //return the error
}

以上情况很好,但我只是想知道,如果抛出另一个QueryException,与重复的slug无关,我会错误地返回一个重复的slug错误消息。

有没有办法找出查询异常是什么,并根据此返回错误消息?我知道异常提供了自己的消息,但我希望有一些用户友好的东西。

2 个答案:

答案 0 :(得分:4)

要检查是否因重复而导致QueryException,请检查$e->getCode()是否等于23000

当由于约束而发生重复时,MySQL将发出signal SQLSTATE 23000,您可以使用它来确定究竟出了什么问题。您可以在MySQL中实现自己的信号来发出各种错误信号(通过触发器等)

示例:

try {
    User::create($data);
} catch (\Illuminate\Database\QueryException $e) {
    if($e->getCode() === '23000') {
        // you got the duplicate
    }
}

答案 1 :(得分:1)

您可以检查异常对象的错误信息

看起来像这样..

+errorInfo: array:3 [▼
0 => "23000"
1 => 1062
2 => "Duplicate entry 'abc@gmail.com' for key 'users_email_unique'"

您可以在catch ..中编写以下代码。

 try{}
    catch(QueryException $qe){
    If ($qe->errorInfo[0] == "23000" && $qe->errorInfo[1] == "1062"){
        return "Your message"
    }else{
        return "General Message"
    } 
}