laravel 5在运行时更改数据库名称

时间:2016-02-17 19:50:19

标签: database connection

有没有办法更改连接的数据库名称而不是添加另一个? 如果我在Config.database.connections中添加3个或5个数据库,那也没关系,但如果我有100个或更多我正在使用的数据库呢? 既然所有人都使用相同的HOST,USERNAME和PASSWORD,那么只需动态更改数据库名称并在整个会话期间使用它吗? 我试过了

Config::set('database.connections.mysql.database', 'database1');

但是当我尝试使用查询时,它仍然使用默认查询。

2 个答案:

答案 0 :(得分:4)

如果有人仍在搜索此问题的答案,请回答:

您可以在运行时更改数据库名称(而不是连接),如下所示:

在控制器或中间件之上导入以下类:

use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;

然后在inside函数中,按如下方式更改数据库名称:

DB::disconnect('mysql');//here connection name, I used mysql for example
Config::set('database.connections.mysql.database', $dbName);//new database name, you want to connect to.

在此之后,无论何时您将进行查询以从任何表中提取任何数据,它都将搜索到提供的新数据库。

请注意,这是为了在运行时更改 SAME 连接中的数据库名称。

我希望它有所帮助

答案 1 :(得分:0)

在我的情况下,使用Laravel 6断开连接并单独设置是无效的。
我仍然必须像这样重新连接数据库:

 \DB::disconnect('mysql'); 
 \Config::set('database.connections.mysql.database', $database_name);
 \DB::reconnect();

有关此案的更多信息,请点击Laravel 6 config()->get('database.connections.mysql') not matching DB:connection()