mutiples-bases-de-datos-laravel-5

Algunos proyectos de desarrollo pueden requerir el uso de una o varias bases de datos en las cuales almacenar de forma independiente toda la información del sistema, inclusive puede ser requerido el uso de múltiples motores de bases de datos en algunos casos.

Sin duda puede resultar una tarea tediosa el manejo de estas conexiones, la configuración de los modelos para cada motor de base de datos, entre otros.

Afortunadamente, Laravel pone a nuestra disposición un conjunto de herramientas destinadas a hacernos la vida más fácil como programadores y en este caso en particular, les enseñarle a manejar múltiples conexiones a bases de datos independientes usando Eloquent, el ORM de Laravel.

Estableciendo conexiones

Lo primero que debemos hacer es definir las credenciales correspondientes a cada conexión de base de datos que deseamos utilizar, para ello accedemos al archivo de configuración de nuestra aplicación config\database.php: 

'default'  => 'mysql',

'connections'  => [

     'mysql'  => [
     'driver'     => 'mysql',
     'host'       => env('DB_HOST', 'localhost'),
     'database'   => env('DB_DATABASE', 'forge'),
     'username'   => env('DB_USERNAME', 'forge'),
     'password'   => env('DB_PASSWORD', ''),
     'charset'    => 'utf8',
     'collation'  => 'utf8_unicode_ci',
     'prefix'     => '',
     'strict'     => false,
     ],

    ‘comments’  => [
    'driver'     => 'mysql',
    'host'       => env('COMMENTS_HOST', 'localhost'),
    'database'   => env('COMMENTS_DATABASE', 'forge'),
    'username'   => env('COMMENTS_USERNAME', 'forge'),
    'password'   => env('COMMETNS_PASSWORD', ''),
    'charset'    => 'utf8',
    'collation'  => 'utf8_unicode_ci',
    'prefix'     => '',
    'strict'     => false,
     ],

],

En este caso estamos creando dos conexiones, una llamada mysql y otra llamada comments.

Cuando no se especifique la conexión a utilizar el sistema tomará el valor por defecto, en este caso ‘mysql’.

Recuerden que si trabajamos haciendo uso de las buenas prácticas, los valores de las variables estarán definidas dentro del archivo .env de nuestra aplicación.

DB_HOST=localhost
DB_DATABASE=base_de_datos_principal
DB_USERNAME=homestead
DB_PASSWORD=secret
COMMENTS_HOST=localhost
COMMENTS_DATABASE=base_de_datos_comments
COMMENTS_USERNAME=homestead
COMMENTS_PASSWORD=secret

Creando migraciones con múltiples bases de datos

Podemos crear migraciones indicando la conexión con la que se desea trabajar y Laravel hará el resto por nosotros.

Schema::connection('comments')->create('users', function($table)
{
   $table->increments('id');
});

Definiendo modelos con diferentes bases de datos

Especificar la conexión a utilizar para cada consulta SQL (query)  a la larga resultará en mucho más código del que desearíamos tener, la solución recomendada es especificarlo en cada modelo que creemos, de la siguiente forma:

En nuestro modelo User se puede escribir :

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model {

     /**
     * The database connection used by the model.
     *
     * @var string
     */
     protected $connection = 'comments';

     /**
     * The database table used by the model.
     *
     * @var string
     */
     protected $table = 'forms';

     //Etc...

}

Con esto ya tendríamos todo listo para empezar a gestionar múltiples conexiones en nuestro proyecto de Laravel 5.

Si quieres aprender más sobre bases de datos y migraciones no olvides ver el curso de Laravel 5 y seguir al día con las publicaciones diarias.

Tutoriales relacionados:

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Agregar rutas adicionales a un controlador de tipo resource en Laravel Lección siguiente Cómo subir archivos con Laravel 5