首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel:动态连接数据库

Laravel:动态连接数据库
EN

Stack Overflow用户
提问于 2016-03-18 13:03:11
回答 5查看 35.7K关注 0票数 31

我正在用Laravel 5(.1)创建一个应用程序,在那里它需要连接到不同的数据库。唯一的问题是不知道必须连接到哪些数据库,因此无法在配置中使用database.php。控制器负责使用动态给定的连接细节进行连接。

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

提前感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-03-18 13:08:49

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

config/database.php加载的配置以database形式存储在Laravel中。这意味着,connections数组在config/database.php中存储在database.connections

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

代码语言:javascript
复制
Config::set("database.connections.mysql", [
    "host" => "...",
    "database" => "...",
    "username" => "...",
    "password" => "..."
]);

从此以后,任何使用此mysql连接的优秀模型都将使用这个新的数据库连接配置。

如果可能的话,我建议在服务提供商中这样做。

票数 49
EN

Stack Overflow用户

发布于 2016-03-18 13:26:32

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

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

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

代码语言:javascript
复制
config(['database.connections.mynewconnection' => {settings here}]);

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

代码语言:javascript
复制
DB::purge('mynewconnection');

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

代码语言:javascript
复制
DB::setDefaultConnection('mynewconnection');
票数 26
EN

Stack Overflow用户

发布于 2020-09-01 06:32:55

您可能需要使用以下这些:

代码语言:javascript
复制
use Illuminate\Support\Facades\Config;
use DB;

设置数据库配置:

代码语言:javascript
复制
        Config::set("database.connections.mysql_external", [
            'driver' => 'mysql',
            "host" => "localhost",
            "database" => "db_name",
            "username" => "root",
            "password" => "root",
            "port" => '8889',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ]);

连接到数据库并做一些事情:

代码语言:javascript
复制
    $users = DB::connection('mysql_external')->select('Select id from users');

断开数据库和重置配置变量

代码语言:javascript
复制
        DB::disconnect('mysql_external');
        Config::set("database.connections.mysql_external", [
            'driver' => 'mysql',
            "host" => "localhost",
            "database" => "",
            "username" => "",
            "password" => "",
            "port" => '',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ]);
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36085131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档