Laravel:动态连接到数据库

2022-08-30 15:05:18

我正在Laravel 5(.1)中创建一个应用程序,需要它连接到不同的数据库。唯一的问题是不知道它必须连接到哪些数据库,因此在config中使用数据库.php是不可能的。控制器负责使用动态给定的连接详细信息建立连接。

如何与数据库建立新连接,包括使用 DB 类?(或者这可能吗)

提前致谢!


答案 1

最简单的解决方案是在运行时设置数据库配置。Laravel 可能希望从文件中加载这些设置,但这并不意味着您以后无法设置或更改它们。config/database.php

从 中加载的配置存储在 Laravel 配置中。这意味着,内部的数组存储在 。config/database.phpdatabaseconnectionsconfig/database.phpdatabase.connections

因此,您可以轻松覆盖/更改这些连接,如下所示:

Config::set("database.connections.mysql", [
    "host" => "...",
    "database" => "...",
    "username" => "...",
    "password" => "..."
]);

从那时起,任何使用此连接的 Eloquent 模型都将使用此新的数据库连接配置。mysql

如果可能的话,我建议在服务提供商中执行此操作。


答案 2

我偶然发现了同样的问题。

您实际上可以在运行时更改数据库设置并使用它们。

使用 config() 函数设置额外或覆盖现有连接设置。

config(['database.connections.mynewconnection' => {settings here}]);

请记住,这些设置是缓存的。因此,当您需要使用新设置时,请清除要使用的连接的数据库缓存。

DB::purge('mynewconnection');

您还可以操作使用的默认连接。如果您希望通过不同的连接使用迁移,并使用使用的连接中的迁移表跟踪它们,这可以派上用场。或者其他很酷的东西当然...

DB::setDefaultConnection('mynewconnection');

推荐