假设您有一个SaaS产品,该产品允许用户连接到他们的数据库,执行某些操作,然后断开连接。只要具有凭据,他们就可以连接到任何数据库。
在Laravel中,根据我的研究,您似乎只能使用配置文件config/database.php
或.env
文件连接到数据库,然后通过编程方式通过以下方式切换连接:
$dbFoo = DB::connection('foo');
$dbBar = DB::connection('bar');
$dbBaz = DB::connection('baz');
我的问题是,我需要能够根据用户输入同时临时连接到各种数据库,因此无法使用上述方法。
所以,我在这里有什么选择?
在您的database.php中,您可以这样定义连接:
'connections' => [
'dynamic' => [
'driver' => 'mysql',
'host' => env('DB_DEFAULT_HOST'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DEFAULT_SCHEME'),
'username' => null,
'password' => null,
'charset' => 'utf8mb4',
]
],
然后在您的控制器中,您可以:
//If you need to override just a few values
config(['database.connections.dynamic.host' => 'new_host']);
//If you rather redeclare the whole thing
$params = [
'driver' => 'mysql',
'host' => $host,
'port' => env('DB_PORT', '3306'),
'database' => $db,
'username' => $user,
'password' => $pass,
'charset' => 'utf8mb4',
];
config(['database.connections.dynamic' => $params]);
$dbBaz = DB::connection('dynamic');