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,有人可以为我指出正确的方向以使其正常工作吗?

4

2 回答 2

4

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

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);
});
于 2014-08-20T13:26:27.180 回答
3

我发现了 evilive 的答案,并且需要额外的代码行才能正确地将胶囊与 Jenssenger 模型联系起来:

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

呼吁

$capsule->bootEloquent();

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

于 2014-10-08T15:08:00.293 回答