Cómo usar múltiples bases de datos en Laravel


Laravel hace posible la conexión a diferentes bases de datos de la manera más fácil posible, actualmente soporta los motores de base de datos más populares:MySQLPostgreSQLSQLite SQLServer, y por eso nos hace siempre felices.


En aplicaciones y proyectos web sencillos es común tener una conexión a una sola base de datos, la cual es más que suficiente para almacenar y leer la información administrada por nuestro proyecto. En aplicaciones web más robustas, de mayor tamaño o con requerimientos muy especiales surge la necesidad de utilizar múltiples bases de datos, una para leer, otra para escribir la información o tal vez una base de datos que tiene algún propósito especial en otro sistema. 

Configuración


Primero que todo debemos realizar la configuración de las conexiones, esta configuración se hace en el archivoCódigo :
app/config/database.php
.

En este archivo puedes establecer la configuración para todas las bases de datos que necesites, de forma predeterminada Laravel provee cuatro configuraciones de ejemplo para cada uno de los motores de base de datos mencionados:

Código :
'connections' => array(

      'sqlite' => array(
         'driver'   => 'sqlite',
         'database' => __DIR__.'/../database/production.sqlite',
         'prefix'   => '',
      ),

      'mysql' => array(
         'driver'    => 'mysql',
         'host'      => 'localhost',
         'database'  => 'database',
         'username'  => 'root',
         'password'  => '',
         'charset'   => 'utf8',
         'collation' => 'utf8_unicode_ci',
         'prefix'    => '',
      ),

      'pgsql' => array(
         'driver'   => 'pgsql',
         'host'     => 'localhost',
         'database' => 'database',
         'username' => 'root',
         'password' => '',
         'charset'  => 'utf8',
         'prefix'   => '',
         'schema'   => 'public',
      ),

      'sqlsrv' => array(
         'driver'   => 'sqlsrv',
         'host'     => 'localhost',
         'database' => 'database',
         'username' => 'root',
         'password' => '',
         'prefix'   => '',
      ),

   ),


Si necesitas una nueva conexión solo basta con añadirla al arreglo de conexiones y establecerle un nombre único:

Código :
'connections' => array(

      'stark' => array(
         'driver'    => 'mysql',
         'host'      => 'westeros',
         'database'  => 'database',
         'username'  => 'JonSnow',
         'password'  => 'Y0uN0th1ngJ0nS4nw',
         'charset'   => 'utf8',
         'collation' => 'utf8_unicode_ci',
         'prefix'    => '',
      ),

      'lannister' => array(
         'driver'    => 'mysql',
         'host'      => 'westeros',
         'database'  => 'database',
         'username'  => 'Joffrey',
         'password'  => 'Wh0R3memb3rTh4atL1ttleB1tch?',
         'charset'   => 'utf8',
         'collation' => 'utf8_unicode_ci',
         'prefix'    => '',
      ),

   ),


En el archivo de configuración también se puede establecer la conexión de base de datos que se usará de forma predeterminada, es la opción siguiente:
Código :
'default' => 'mysql'


Uso de múltiples conexiones en Laravel


El uso de diferentes conexiones es, como bien sabemos, muy fácil e intuitivo en Laravel:

Esquema

Para definir el esquema de base de datos usa el método:
Código :
Schema::connection

Código :
Schema::connection('stark')->create('deaths', function($table)
{
    $table->increments('id');
    $table->string('type');
    $table->string('name');
});


Consultas

Si estás usando el constructor de consultas simples usa el método:
Código :
DB::connection

Código :
$users = DB::connection('lannister')->select(...);


Eloquent

Si estás usando Eloquent puedes definir la conexión de base de datos en el modelo a través de la propiedadCódigo :
$connection
 

Código :
<?php

class Death extends Eloquent {

    protected $connection = 'stark';

}


Tiempo de ejecución

Si necesitas cambiar de conexión de base de datos durante la ejecución de alguna función puedes hacerlo con el método:
Código :
 setConnection 


el cual recibe como parámetro el nombre de la conexión:
Código :
<?php

class KillController extends BaseController {

    public function decapitate()
    {
        $death = new Death;

        $death->setConnection('lannister');

        $joffrey = $death->find(1);

        return $joffrey;
    }

}


Como vimos Laravel ofrece soluciones sencillas a los problemas comunes que surgen en nuestras aplicaciones web.

Comentarios

Entradas populares de este blog

Instalar Ruby on Rails en Ubuntu 13.04

Navigation Drawer (Cajón de Navegación) Android

Preguntas de una entrevista de trabajo para Ruby y Ruby on Rails