prinzechristian prinzechristian - 7 months ago 166
PHP Question

Multiple database connection using Illuminate/Database Eloquent ORM in CodeIgniter 3

I have just included Laravel's database layer Eloquent to my CodeIgniter 3 project. My problem however is that I can't connect to multiple databases using Eloquent models.

For the default DB, this is how I configured the DB:

$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();


The above works well. But I have an employee table from another database. I can use it using query builder, but fails with Eloquent models.

I tried this:

$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();


Tried setting up an Eloquent model and using the connection like:

protected $connection = "employees";


Is it possible to connect to multiple databases using Illuminate\Database Eloquent ORM outside of Laravel? If yes, how?

Answer

Eloquent ORM needs to be initialized only once. Add the optional second parameter as the connection name.

$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();