Php Laravel:如何配置eloqent在数据库超时时引发异常?

Php Laravel:如何配置eloqent在数据库超时时引发异常?,php,laravel,Php,Laravel,如果数据库不可用,则需要几秒钟的加载时间。然后日志显示了这个错误,这不应该触发异常处理程序吗?(其他错误按预期结束) 然后我看到“504网关超时服务器没有及时响应。”错误。如何配置eloquent以使数据库超时引发常规异常?(因此处理程序可以显示更吸引人的标准错误页面) 我尝试在config/database.php中将PDO选项设置为PDO::ERRMODE_EXCEPTION,然后在php artisan config:clear中设置,但没有成功 'mysql' =>

如果数据库不可用,则需要几秒钟的加载时间。然后日志显示了这个错误,这不应该触发异常处理程序吗?(其他错误按预期结束)

然后我看到“504网关超时服务器没有及时响应。”错误。如何配置eloquent以使数据库超时引发常规异常?(因此处理程序可以显示更吸引人的标准错误页面)

我尝试在config/database.php中将PDO选项设置为PDO::ERRMODE_EXCEPTION,然后在
php artisan config:clear
中设置,但没有成功

        'mysql' => [ 
                'driver' => 'mysql', 
                'host' => env('DB_HOST', 'forge'), 
                'port' => env('DB_PORT', '3306'), 
                'database' => env('DB_DATABASE', 'forge'), 
                'username' => env('DB_USERNAME', 'forge'), 
                'password' => env('DB_PASSWORD', ''), 
                'charset' => 'utf8', 
                'collation' => 'utf8_unicode_ci', 
                'prefix' => '', 
                'strict' => false, 
                'engine' => null, 
                'options'   => [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,]
                ],

出现
504网关超时
错误的原因是,当您使用不存在的数据库执行查询时,需要花费很长时间(我大约需要2分钟)

我怀疑web服务器或php配置的最大执行时间低于此值,因此会生成
504网关超时
错误

有两种方法可以解决此问题:

增加服务器和PHP配置中的最大执行时间 通过调整服务器配置文件,增加服务器中的最大执行时间:

  • Nginx:
  • 阿帕奇:
还要增加php.ini文件中的
max\u execution\u time
时间(确保更改web服务器使用的时间,而不仅仅是CLI)。或者在index.php的开头添加以下内容:

ini_set('max_execution_time', 1200); // 1200 seconds
减少PDO超时值 使用以下选项:

 'options'   => [PDO::ATTR_TIMEOUT=> 10, // timeout in seconds]

请注意,由于某些原因,实际超时通常大于指定的超时。我的测试表明,有10秒的超时,实际上是在40秒超时。20秒在80秒时超时。我不知道这是为什么。您的体验可能会有所不同。

天哪,它奏效了!再次感谢,它的工作:)我祝你有一个伟大的一天!
 'options'   => [PDO::ATTR_TIMEOUT=> 10, // timeout in seconds]