Files
cunkebao_v3/Moncter/support/bootstrap/MongoDB.php
2026-01-05 10:16:20 +08:00

74 lines
2.5 KiB
PHP

<?php
namespace support\bootstrap;
use Webman\Bootstrap;
use Workerman\Worker;
use MongoDB\Laravel\Connection;
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Database\ConnectionResolverInterface;
/**
* MongoDB 连接初始化 Bootstrap
*
* 用于初始化 MongoDB Laravel 包的数据库连接管理器
*/
class MongoDB implements Bootstrap
{
public static function start(?Worker $worker): void
{
$dbConfig = config('database', []);
if (isset($dbConfig['connections']['mongodb'])) {
$mongoConfig = $dbConfig['connections']['mongodb'];
// 构建包含认证信息的 DSN
$dsn = $mongoConfig['dsn'];
if (!empty($mongoConfig['username']) && !empty($mongoConfig['password'])) {
if (strpos($dsn, '@') === false) {
$dsn = str_replace(
'mongodb://',
'mongodb://' . urlencode($mongoConfig['username']) . ':' . urlencode($mongoConfig['password']) . '@',
$dsn
);
$dsn .= '/' . $mongoConfig['database'];
if (!empty($mongoConfig['options']['authSource'])) {
$dsn .= '?authSource=' . urlencode($mongoConfig['options']['authSource']);
}
}
}
// 过滤掉空字符串的选项
$options = array_filter($mongoConfig['options'] ?? [], function ($value) {
return $value !== '';
});
// 初始化 MongoDB Laravel 连接管理器
// 创建 Capsule 实例
$capsule = new Capsule();
// 注册 MongoDB 连接工厂
// MongoDB Laravel 包使用 'mongodb' 驱动,需要注册连接解析器
$capsule->getDatabaseManager()->extend('mongodb', function ($config, $name) {
$config['name'] = $name;
return new Connection($config);
});
// 添加 MongoDB 连接
$capsule->addConnection([
'driver' => 'mongodb',
'dsn' => $dsn,
'database' => $mongoConfig['database'],
'options' => $options,
], 'mongodb');
// 设置为全局连接管理器
$capsule->setAsGlobal();
// 启动 Eloquent ORM
$capsule->bootEloquent();
}
}
}