gpt4 book ai didi

php - 如果在 Laravel 5.3 中失败,自动连接到另一个数据库

转载 作者:行者123 更新时间:2023-11-29 02:15:22 27 4
gpt4 key购买 nike

我使用 Laravel 5.3。我已经在我的 env 文件中定义了与我的数据库的连接。

我使用多个 MySQL 服务器,如果一个出现故障,我想自动使用第二个连接。

我将使用我认为的过滤器并捕获 PDOException。

但我想知道 Laravel 是否有更好的方法来做到这一点,我想只使用 config/env。

最佳答案

使用中间件时,您可以尝试/捕获请求中的异常,然后切换连接。不确定这是否适用于控制台或迁移。可能不是。

在您的应用程序中添加此中间件:

namespace App\Http\Middleware;

use Closure;
use DB;

class SwitchConnection
{
public function handle($request, Closure $next)
{
try {
return $next($request);
} catch (\Exception $e) { //Use a proper exception here, depending on which way/database you are connecting
$this->switchConnection();
return $next($request);
}
}

private function switchConnection()
{
//here get all connections from config that applies
//@todo use a better way to get those db names
$dbNames = ['conn1', 'conn2', 'conn3',];
foreach($dbNames as $dbName) {
try {
\DB::connection($dbName)->getDatabaseName();
\Config::set('database.default', $dbName);
return;
} catch (\Exception $e) {
continue;
}
}
}
}

加入你的Kernel.php

protected $routeMiddleware = [
...
'switchConnection' => \App\Http\Middleware\SwitchConnection::class,

然后在您的 routes.php 中,您可以这样做:

Route::group('middleware' => ['switchConnection']], function(){
.... //your routes go here
});

关于php - 如果在 Laravel 5.3 中失败,自动连接到另一个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40662330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com