6

我刚刚将 Laravel 的数据库层 Eloquent 包含到我的 CodeIgniter 3 项目中。然而,我的问题是我无法使用 Eloquent 模型连接到多个数据库。

对于默认数据库,这是我配置数据库的方式:

$capsule = new Capsule;

$capsule->addConnection(array(
        'driver'    => 'mysql',
        'host'      => "localhost",
        'database'  => "employees_db",
        'username'  => "root",
        'password'  => "",
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        ));

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

以上效果很好。但是我有一个来自另一个数据库的员工表。我可以使用查询生成器来使用它,但是使用 Eloquent 模型失败了。

我试过这个:

$employees = new Capsule;

$employees->addConnection(array(
        'driver'    => 'mysql',
        'host'      => "host2",
        'database'  => "employees_db",
        'username'  => "user",
        'password'  => "pass",
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        ),'employees');

$employees->setAsGlobal();

尝试设置 Eloquent 模型并使用如下连接:

protected $connection = "employees";

是否可以在 Laravel 之外使用 Illuminate\Database Eloquent ORM 连接到多个数据库?如果是,如何?

4

1 回答 1

22

Eloquent ORM 只需要初始化一次。添加可选的第二个参数作为连接名称。

$capsule = new Capsule;

$capsule->addConnection(
    array(
        'driver'    => 'mysql',
        'host'      => "localhost",
        'database'  => "employees_db",
        'username'  => "root",
        'password'  => "",
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
    "default"
);

$capsule->addConnection(
    array(
            'driver'    => 'mysql',
            'host'      => "192.168.1.1",
            'database'  => "employees_db2",
            'username'  => "user",
            'password'  => "password",
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
    ),
    "employees"
        );

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

当上述设置完成后,您可以通过编写以下代码在模型文件中指定要连接的数据库:

protected $connection = "employees";
于 2016-01-07T08:13:05.833 回答