Laravel:动态连接到数据库
2022-08-30 15:05:18
我正在Laravel 5(.1)中创建一个应用程序,需要它连接到不同的数据库。唯一的问题是不知道它必须连接到哪些数据库,因此在config中使用数据库.php是不可能的。控制器负责使用动态给定的连接详细信息建立连接。
如何与数据库建立新连接,包括使用 DB 类?(或者这可能吗)
提前致谢!
我正在Laravel 5(.1)中创建一个应用程序,需要它连接到不同的数据库。唯一的问题是不知道它必须连接到哪些数据库,因此在config中使用数据库.php是不可能的。控制器负责使用动态给定的连接详细信息建立连接。
如何与数据库建立新连接,包括使用 DB 类?(或者这可能吗)
提前致谢!
最简单的解决方案是在运行时设置数据库配置。Laravel 可能希望从文件中加载这些设置,但这并不意味着您以后无法设置或更改它们。config/database.php
从 中加载的配置存储在 Laravel 配置中。这意味着,内部的数组存储在 。config/database.php
database
connections
config/database.php
database.connections
因此,您可以轻松覆盖/更改这些连接,如下所示:
Config::set("database.connections.mysql", [
"host" => "...",
"database" => "...",
"username" => "...",
"password" => "..."
]);
从那时起,任何使用此连接的 Eloquent 模型都将使用此新的数据库连接配置。mysql
如果可能的话,我建议在服务提供商中执行此操作。
我偶然发现了同样的问题。
您实际上可以在运行时更改数据库设置并使用它们。
使用 config() 函数设置额外或覆盖现有连接设置。
config(['database.connections.mynewconnection' => {settings here}]);
请记住,这些设置是缓存的。因此,当您需要使用新设置时,请清除要使用的连接的数据库缓存。
DB::purge('mynewconnection');
您还可以操作使用的默认连接。如果您希望通过不同的连接使用迁移,并使用使用的连接中的迁移表跟踪它们,这可以派上用场。或者其他很酷的东西当然...
DB::setDefaultConnection('mynewconnection');