捕获查询异常?

pan*_*hro 1 php laravel eloquent laravel-5 laravel-5.3

我的数据库中有一个 slug 列,它是独一无二的。

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

我发现了错误,并希望返回一条类似于“slug 存在”的错误消息。

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

以上很好,但我只是想知道,如果抛出另一个 QueryException 怎么办,这与重复的 slug 无关,并且我错误地返回了重复的 slug 错误消息。

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

Mjh*_*Mjh 6

要检查是否QueryException因为重复而得到 a ,请检查是否$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
    }
}
Run Code Online (Sandbox Code Playgroud)