Laravel 8 在运行时全局更改数据库连接

Laravel 8 Change database connection globally in the runtime

我的要求很简单,我找到了很多解决方案,但是 none 对我有用。

我有两个 MySQL 数据库,其中一个将发生所有写入操作,并且有一个该数据库的副本,它是只读的。我正在创建一个中间件,如果请求是 GET,它应该使用只读数据库,否则使用主数据库。

我已经尝试过这些:

DB::disconnect();
Config::set('database.default', 'mysql_readonly');
DB::reconnect('mysql_readonly');


Config::set('database.default', 'mysql_readonly');
DB::purge('mysql_readonly');


DB::disconnect();
Config::set('database.default', 'mysql_readonly');
DB::connection('mysql_readonly');

None 个解决方案有效。

我找到了可行的解决方案。

$readOnlyConfig = config('database.connections.mysql_readonly');
Config::set('database.connections.mysql', $readOnlyConfig);
DB::purge();