Comunidad de diseño web y desarrollo en internet online

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: MySQL, PostgreSQL, SQLite y 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 archivo

Có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 propiedad

Có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.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate