首页 文章

雄辩的Laravel外面有jenssegers / laravel-mongodb多个数据库连接

提问于
浏览
2

我正在尝试将Eloquent连接到多个数据库sqlserver以获取默认值,将mongodb连接到辅助连接 . 我正在使用jenssegers / laravel-mongodb使用作曲家 . 这是我的数据库文件

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
        'driver'   => 'sqlsrv',
        'host'     => '******',
        'database' => '*****',
        'username' => '*****',
        'password' => '*****',
        'prefix'   => '',
    ], 'default');

$capsule->addConnection([
        'driver'   => 'mongodb',
        'host'     => 'localhost',
        'port'     => 27017,
        'username' => '',
        'password' => '',
        'database' => 'production'
], 'mongo');

$capsule->setAsGlobal();
$capsule->bootEloquent();

问题是当我尝试连接到mongo数据库时,它会抛出以下错误:

InvalidArgumentException thrown with message "Unsupported driver [mongodb]"

在我看来,Illuminate连接工厂不支持mongodb开箱即用,有人可以指出我正确的方向让这个工作吗?

2 回答

  • 3

    你是对的,它没有原生支持 . 但它很容易添加:

    composer require jenssegers/mongodb:*
    

    然后:

    use Illuminate\Database\Capsule\Manager as Capsule;
    use Jenssegers\Mongodb\Connection as Connection;
    
    $capsule = new Capsule();
    
    $capsule->getDatabaseManager()->extend('mongodb', function($config){
        return new Connection($config);
    });
    
  • 4

    我发现恶意的答案和额外的代码行需要将胶囊正确地绑在Jenssenger模型中:

    Jenssegers\Mongodb\Model::setConnectionResolver($capsule->getDatabaseManager());
    

    打电话给

    $capsule->bootEloquent();
    

    将各种连接解析器/数据库管理器绑定到Eloquent模型,但它似乎没有将它们绑定到Jessenger模型 .

相关问题