所以我有数百个数据库,我想根据传入的值来更改要使用的数据库
例如,我有许多公司分支机构,其分支代码(000,001,002,003,依此类推,最多200个)。它们都具有相同的表,但是只是在不同的数据库中创建的。还假设只有数据库名称是不同的。我的问题是,当有数百个数据库时,我该如何访问另一个数据库?我应该动态更改.env文件吗?每当用户选择另一个分支时,是否应该创建一个更改连接的函数?如果可以,该如何更改?
是的,我尝试通过在config / database.php中配置并添加新的数据库连接来连接两个数据库,但是我不知道如何对数百个数据库进行连接。有没有一种更快的方法,也许在database.php中添加了for循环?或者也许以某种方式更改.env DB_DATABASE变量。
答案 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