Laravel中使用jensseger/mongodb切换连接后如何获取当前数据库?
问题描述
我正在使用兼容Laravel 9的旧版jensseger/mongodb库。
我的MongoDB连接配置如下:
'mongodb' => [ 'driver' => 'mongodb', 'host' => env('MONGODB_HOST', 'localhost'), 'port' => env('MONGODB_PORT', 27017), 'database' => env('MONGODB_DATABASE'), 'username' => env('MONGODB_USERNAME'), 'password' => env('MONGODB_PASSWORD'), 'options' => [ 'database' => env('MONGODB_DATABASE') ] ],
需求说明:当新供应商注册时自动创建新数据库,目前我通过以下代码切换数据库连接:
DB::disconnect('mongodb'); // Connection name DB::purge('mongodb'); Config::set('database.connections.mongodb.database', $databaseName); Config::set('database.connections.mongodb.options.database', $databaseName); DB::reconnect('mongodb');
我可以通过以下代码获取所有数据库列表:
$data = DB::connection('mongodb')->getMongoClient()->listDatabases(); print_r($data);
请问:如何获取当前MongoDB连接对应的数据库?
解决方案
针对旧版jensseger/mongodb库,你可以用这几种方法拿到当前连接的数据库:
- 直接读取Laravel配置
既然切换数据库时你已经修改了配置项,直接从配置里取值即可:
// 获取当前数据库名 $currentDb = Config::get('database.connections.mongodb.database');
- 从MongoDB连接实例中获取
调用getMongoDB()方法拿到当前连接的数据库对象,再获取其名称:
$currentDb = DB::connection('mongodb')->getMongoDB()->getName();
- 从Mongo客户端的默认数据库获取
如果你的连接已经设置了默认数据库,也可以通过客户端实例获取:
$currentDb = DB::connection('mongodb')->getMongoClient()->getDefaultDatabase()->getName();
这几种方法都能有效获取当前连接的数据库名称,根据你的使用场景选择即可。
内容的提问来源于stack exchange,提问作者Saswat
相关产品推荐
相关产品推荐

