Laravel句柄PDO异常消息

问题描述 投票:0回答:1

我正在Laravel项目中处理异常。我在Handler中像这样处理它们:

public function render($request, Exception $exception)
{
    if ($exception instanceof \Illuminate\Database\Eloquent\ModelNotFoundException)  {
        return response()->view('generalerror', ['name'  => 'The requested resource could not be found.', 'error' => $exception->getMessage()]);
    }
    if ($exception instanceof \PDOException)  {
        return response()->view('generalerror', ['name'  => 'There was a problem adding the requested resource', 'error' => $exception->getMessage()]);
    }

    return parent::render($request, $exception);
}

与ModelNotFoundException的一切正常。我收到正确的消息。

显示PDO异常消息将导致如下所示:

SQLSTATE[HY000]: General error: 1364 Field 'fiscal_code' doesn't have a default value (SQL: insert into `patients` (`surname`, `name`, `POB`, `DOB`, `gender`, `marital_status`, `profession`, `residence`, `telephone_1`, `owner_1`, `telephone_2`, `owner_2`, `telephone_3`, `owner_3`, `updated_at`, `created_at`) values (eyJpdiI6IjBjSXVvVUFkQnBWK2UyN1hhc2JSUVE9PSIsInZhbHVlIjoianNBQjI1OEVvTklEUXhZdUV2TmNQQT09IiwibWFjIjoiODE4MjU3OGM3NzAzZDBlYmNhODI3ZmJkOGMxZGRlM2QxYWJjZTY1MWU5YmZiMGNiYzk4ZTMxYTM3NGM2OGEyOCJ9, eyJpdiI6IjlVZUVcL0pDcDdLdEV5akJ2N0lPRFlnPT0iLCJ2YWx1ZSI6Inh3RjdLSFVpSGtQRjRjT1wvOFdLK2VnPT0iLCJtYWMiOiI5ZDA4MzI3MWM1OTk2ZTJhYThhZDM0OTI1NTE3Y2NhODk4OWRhNWZjNDUzOGJkZDhkNzMyZTE0NmMyOGM0NTQ5In0=, , 1111-11-11, eyJpdiI6IldNSFloZUVmMjFuM1RrRWZHN2NvWVE9PSIsInZhbHVlIjoiRXN3OXZNdlpGMUtRK2VDbTh6ZzFVZz09IiwibWFjIjoiMGNlOTI1YTJlYWI1MzM4OTc4OTAwYWVjMDI1YjVmNDkxZmQ5MjlkMzZiNzg1YWVhOWM2MjQyN2JiZDQ0NDQ2NyJ9, eyJpdiI6Ik1udTVsRWF4NXNuY0Fsc05VdGNqR1E9PSIsInZhbHVlIjoieFB0ZitqZVwvMmxNUVNBUFZVeHRPRVE9PSIsIm1hYyI6IjE3NzNjMGZiMGUyNWU0Y2I4Nzg2YWFiZjc0NGU4NzhmNDU4YTdlNDY5MGYyYjIyNjc5ZTJkODExYTc5YjY0YWMifQ==, eyJpdiI6ImhBbW1EdXZZQ0VEOEJoeTUzMXU3RXc9PSIsInZhbHVlIjoiNjY5UUh3ZlwvYU1MZTlIMkFueFRCQ1E9PSIsIm1hYyI6Ijc1OGU0Nzc4ZWNkYmJlOTVjYzQ5OTI5Mzc2YjRmZjUwMDNhYmYyMjkyYWQ5NDZhNDc2NzFmM2MwMjAxNTU3M2YifQ==, eyJpdiI6IkhuM3Y0SFwvMEh3YTllb2xtNWxUR3Z3PT0iLCJ2YWx1ZSI6ImRLbUlhXC84ZExmd2hCNVlGNlRnZkxBPT0iLCJtYWMiOiI3ZTdmNThhZWNmN2IwZGZhYjBhNjNjN2ZlMzQ3M2ZiYmFlMDlhNmQ2MTJiMTU4YzMzM2Q2OWE2ZWQ3ZDVhYzAwIn0=, eyJpdiI6ImIxQ3hSazJZU01nYmRTVURjMVBFY2c9PSIsInZhbHVlIjoiQ3ZpS2JzcnRJNDNIRUpKV2hEZ2VBQT09IiwibWFjIjoiYjgzZDk1Zjk3ZWFjMGZmNWYyZmZhMWVmZGRlY2Q5MDRhODNmYTBiMTdkM2ZhZjc0YTY1MGM3NTEyZjliODAyNCJ9, eyJpdiI6Ik9RMFgzTG5mXC82aVlEVnZGYkpRMEtnPT0iLCJ2YWx1ZSI6IllBNFpVXC9QbDFqTlwvR0dkcnd5ek9uQT09IiwibWFjIjoiODE1MmZjNGM4OTQ3ZjdlNjk1OGZlODdhNDdhMDg4NGNjODg4MzA5ZmZiMWFlZDA3NzIyYmE3YTM4NzdkYjk4NiJ9, eyJpdiI6IkN5NUhUVEhzZ01HaGM4cmkwdmpNeUE9PSIsInZhbHVlIjoicDlVQ3NtcGZ6Ykt2TDJVWWtqVkN4dz09IiwibWFjIjoiNWNmMDBhNzc5MmJlMjlhMzViYzdhNWNhNzViOGUwMDhjMmJjY2U5ZmIwNDBiZTA0N2NjMWI5MzljYjllZDk4MyJ9, eyJpdiI6IlpVU0xjWEtIUTc1Y3kyUlwva1VBWEh3PT0iLCJ2YWx1ZSI6IkcyM2RJVHRiM3kzZ0hORGxmSVduemc9PSIsIm1hYyI6Ijc1NmI2ZDI5ZTcwZDM1NmEyYzM1YmVjMDk2NWYwOTJkZWI0MTc5MmI1Njg2ZGQzMjc3Y2M4ZjlmZWVmNWE3ZGIifQ==, eyJpdiI6Iml6TGJ3YlF3RThYc01cLytvZUFZa013PT0iLCJ2YWx1ZSI6ImtkTVl5Y0lnQkdXZzlwa0xPZ2V5a1E9PSIsIm1hYyI6IjM3MGZkZjk2YzJiNmFmZWJhODA5Nzc0N2Q2OWNhYjY2YTUxMmE1NThjZTAzNzIzZWI2NTk1MGE0ODM2NTEwN2IifQ==, eyJpdiI6IkQySEZjS1BmZld1OHhQcTJxUEtkQWc9PSIsInZhbHVlIjoieGtMcWhYalBJVlBjYVc2XC9OZWpLTkE9PSIsIm1hYyI6IjMwODA2N2Y1Nzc3ZDM1MWM3MzM1OGJlNzNjMDUwM2E2NDEwYWZjOWZkZTU3MDkwMGZlZDdhMWMxODhhYmFhYzcifQ==, 2020-04-05 13:32:26, 2020-04-05 13:32:26))

这将公开我所有的数据库字段和查询本身。我想要一个简单的消息,例如:

SQLSTATE[HY000]: General error: 1364

我尝试使用getCode,但这将仅显示“ HY000”,这是一般的数据库错误消息,而没有给出任何可能的问题的提示。

如何获得我想要的消息?

此外,使用Debugbar,我看到saveOrFail引发异常时,它将同时引发PDOException和QueryException。这是正确的吗?

谢谢。

laravel exception handler laravel-exceptions
1个回答
0
投票

希望对您有帮助

if ($exception instanceof \PDOException && Str::contains($exception->getMessage(), '(SQL:')) {
    dd(Str::before($exception->getMessage(), '(SQL:'));
}

为我打印SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value

© www.soinside.com 2019 - 2024. All rights reserved.