Crear múltiple conexiones a base de datos en Laravel

Publicado hace 2 semanas por luis-alberto-rojas-a

Una de las principales incognitas que se generan al momento de trabajar con grandes cantidades de información en difentes bases de datos, es como obtener de manera dinamica e interactiva esos registros. Gracias a la gran flexibilidad de Laravel podemos generar multiples conexiones a base de datos con tan solo unos sencillos pasos.

Paso 1. Crear un helpers para adicionar un metodo el cual retorne el nombre de la conexión que deseamos obtener.

<?php
    function getConexionMysql(){
        return "DB_MYSQL";
    }
		
		function getConexionSqlsrv(){
        return "DB_SQLSRV";
    }
?>

Paso 2. Adicionar el helper en el archivo composer.json, en la sección autoload

 "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "ApiRest\\": "app/"
        },
        "files": [
        "app/helpers.php"
      ]
    },

Paso 3. Ejecutar en consolar el siguiente comando, para así cargar el archivo de manera global.

composer dump-autoload

Paso 4. En el archivo database.php de la carpeta config, agregamos una nueva conexión que contenga los parametros de conexión. En este caso crearemos dos conexiones; una en mysql y otra a sqlsrv. De está manera podremos generar el puento de conexión a diferentes bases de datos.

 'DB_MYSQL' => [
		'driver'      => 'mysql',
		'host'        => env('DB_HOST_MYSQL', 'forge'),
		'database'    => env('DB_DATABASE_MYSQL', 'forge'),
		'username'    => env('DB_USERNAME_MYSQL', 'forge'),
		'password'    => env('DB_PASSWORD_MYSQL', ''),
		'prefix'      => '',
		 ],
		 
'DB_SQLSRV' => [
		'driver'      => 'sqlsrv',
		'host'        => env('DB_HOST_SQLSRV', 'forge'),
		'database'    => env('DB_DATABASE_SQLSRV', 'forge'),
		'username'    => env('DB_USERNAME_SQLSRV', 'forge'),
		'password'    => env('DB_PASSWORD_SQLSRV', ''),
		'prefix'      => '',
		 ],

Paso 5. Ahora en el archivo env. Agregamos los parametros de conexión correspondientes y, así los metodos anteriores lograran consumir las conexiones pertinentes.

DB_CONNECTION_MYSQL=DB_MYSQL
DB_HOST_MYSQL=XXX
DB_DATABASE_MYSQL=XXX
DB_USERNAME_MYSQL=XXX
DB_PASSWORD_MYSQL=XXX

DB_CONNECTION_SQLSRV=DB_SQLSRV
DB_HOST_SQLSRV=XXX
DB_DATABASE_SQLSRV=XXX
DB_USERNAME_SQLSRV=XXX
DB_PASSWORD_SQLSRV=XXX

Paso 6. En el modelo que se vaya a consultar los datos le pasamos el mÉtodo del helper, para que llame la conexión que desea realizar. De está manera podremos acceder a multiples bases de datos y, no necesariamente a la conexión por defecto.

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class Contacto extends Model
{
    protected $table = "contacto";
    protected $primaryKey = 'id';
    public $timestamps = false;
    protected $fillable = array(
                        'fecha',
                        'tipo',
                        'nombre',
                        'telefono',
                        'email',
                        );

     public function __construct() {
            $this->connection = getConexionMysql();
        }
}
Editado