如何在Laravel中连接到另一个数据库(多个数据库)

时间:2019-09-28 08:02:52

标签: php laravel

所以我有数百个数据库,我想根据传入的值来更改要使用的数据库

例如,我有许多公司分支机构,其分支代码(000,001,002,003,依此类推,最多200个)。它们都具有相同的表,但是只是在不同的数据库中创建的。还假设只有数据库名称是不同的。我的问题是,当有数百个数据库时,我该如何访问另一个数据库?我应该动态更改.env文件吗?每当用户选择另一个分支时,是否应该创建一个更改连接的函数?如果可以,该如何更改?

是的,我尝试通过在config / database.php中配置并添加新的数据库连接来连接两个数据库,但是我不知道如何对数百个数据库进行连接。有没有一种更快的方法,也许在database.php中添加了for循环?或者也许以某种方式更改.env DB_DATABASE变量。

2 个答案:

答案 0 :(得分:1)

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

从config / database.php加载的配置作为数据库存储在Laravel配置中。意思是,config / database.php内部的连接数组存储在database.connections中。

因此您可以像这样轻松地覆盖/更改这些连接:

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

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

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

答案 1 :(得分:0)

实际上,除了在.env中进行设置外,没有其他方法,因为即使您想使其动态,也必须将其设置为100 ifs,如果您只想查看100个设置而不编写100行代码,则可以在此文件中设置循环:

app/config/database.php

如下所示:

return array(

    'default' => 'mysql',

    'connections' => array(

        # Primary/Default database connection
        'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database1',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

        # You loop here
        'mysql2' => array(
            'driver'    => 'mysql',
            'host'      => '127.0.0.1',
            'database'  => 'database2',
            'username'  => 'root',
            'password'  => 'secret'
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),
    ),
);

那是最简单的方法。因此,请按照下面的说明进行操作,然后您应该雄辩地指定要用于该查询的数据库连接! :

您可以在Env文件中进行如下设置:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret

DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret

然后您可以进入condif / database.php并进行如下设置:

'mysql2' => [
    'driver'    => env('DB_CONNECTION_SECOND'),
    'host'      => env('DB_HOST_SECOND'),
    'port'      => env('DB_PORT_SECOND'),
    'database'  => env('DB_DATABASE_SECOND'),
    'username'  => env('DB_USERNAME_SECOND'),
    'password'  => env('DB_PASSWORD_SECOND'),
],

然后您可以用下面的口才:

$users = DB::connection('mysql2')->select(...);

希望这可以帮助您 注意 : 您可以参考此链接以获取更多信息

https://fideloper.com/laravel-multiple-database-connections
相关问题