> Faqs > ¿Cómo usar dos bases de datos MySQL distintas en Laravel?

¿Cómo usar dos bases de datos MySQL distintas en Laravel?

¿Cuál es la mejor alternativa para gestionar dos bases de datos MySQL distintas, en una aplicación Laravel?

Generalmente queremos conectar con la base de datos MySQL principal, pero ocasionalmente queremos recuperar información de otra base de datos que está en el mismo servidor. ¿Cómo lo haríamos para tener conexiones a múltiples bases de datos?

Responder la pregunta
Editar Hacer otra preguntaPreguntar

Respuestas

Esto es supersencillo de realizar con Laravel... más aún para el caso que tú necesitas que tienes que acceder a la vez a una base de datos MySQL distinta, que reside en el mismo servidor.

Configurar la conexión con la segunda base de datos

Las conexiones en Laravel se configuran en el archivo "config/database.php". Allí tendrás una base de datos MySQL ya creada, en el array "connections":

 'connections' => [

    'mysql' => [
        'driver' => 'mysql',
        ...
    ],

Pues ahora tendrás que agregar una segunda conexión, a la que le podrás llamar como desees. Teóricamente esa segunda conexión puede tener cualquier dato de un nuevo servidor al que pudieras conectarte... no hay restricciones en cuanto a usar otros servidores. Pero en tu caso usarás los mismos datos de conexión al servidor que para tu base de datos principal. Por lo que solamente cambiarás el nombre de la base de datos y ocasionalmente el usuario y la clave de esa segunda base de datos, si es que cambia con respecto a la anterior...

 'connections' => [

    'mysql' => [
        'driver' => 'mysql',
        ...
    ],
    
    'mysql2' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => 'otra_base_de_datos',
        ...
    ],

Realizar conexiones con la base de datos "mysql2"

Fíjate que en el array de connections tenemos "mysql" que es la conexión principal con MySQL y "mysql2" que sería la conexión secundaria que quieres usar solo ocasionalmente.

La solución más simple sería usar query builder para esa conexión ocasional, lo que te ahorraría create modelos específicos para las entidades de la segunda base de datos.

$invoices = DB::connection('mysql2')->table('invoices')->get();

Como ves, estamos indicando que la conexión es "mysql2".

La segunda alternativa aquí sería crearte modelos específicos que usen la segunda conexión con MySQL, lo que te puede facilitar las cosas en caso que las operaciones sean más complejas y tengas que manejar relaciones y cosas así.

Para establecer la conexión en la clase del modelo, se usa la propiedad $connection, a la que le asignarías el valor de tu segunda conexión en el array de connections.

class Invoice extends Eloquent {

    protected $connection = 'mysql2';

    // ... resto del modelo
}
Julian
332 10 31 23