我的数据库中有一个slug列,它是唯一的。
如果我尝试使用非唯一的slug存储另一行,我会收到QueryException错误。
我发现错误,并希望返回一条错误信息,其中包含" slug存在"。
try {
User::create($data);
} catch (\Illuminate\Database\QueryException $e) {
//return the error
}
以上情况很好,但我只是想知道,如果抛出另一个QueryException,与重复的slug无关,我会错误地返回一个重复的slug错误消息。
有没有办法找出查询异常是什么,并根据此返回错误消息?我知道异常提供了自己的消息,但我希望有一些用户友好的东西。
答案 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"
}
}