是否可以不使用标准配置方法连接到db ad-hoc?

问题描述 投票:0回答:1

场景

假设您有一个SaaS产品,该产品允许用户连接到他们的数据库,执行某些操作,然后断开连接。只要具有凭据,他们就可以连接到任何数据库。

问题

在Laravel中,根据我的研究,您似乎只能使用配置文件config/database.php.env文件连接到数据库,然后通过编程方式通过以下方式切换连接:

$dbFoo = DB::connection('foo');
$dbBar = DB::connection('bar');
$dbBaz = DB::connection('baz');

我的问题是,我需要能够根据用户输入同时临时连接到各种数据库,因此无法使用上述方法。

所以,我在这里有什么选择?

php laravel database-connection laravel-7 dbconnection
1个回答
0
投票

在您的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');
© www.soinside.com 2019 - 2024. All rights reserved.