Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Laravel / Conexión a múltiples bases de datos en Laravel

Conexión a múltiples bases de datos en Laravel

Autor jc mouse martes, octubre 20, 2020

En este tutorial conoceremos una forma de conectar una aplicación en Laravel con tres bases de datos diferentes, 2 en MySQL y 1 en PostgreSQL, una vez realizada la configuración en el proyecto, nos conectaremos independientemente a cada base de datos para extraer información y mostrarlos en pantalla.

Necesitamos:

  • Sistema de gestión de base de datos y servidor web. Con XAMPP nos basta y sobra.
  • PgAdmin 4. Sistema de gestión y administración de PostgreSQL.
  • Visual Studio Code
  • Conocimientos en PHP y Laravel
  • Un proyecto Laravel recién creado el cual llamaremos «Multiple DB Connections»

Nivel: Intermedio

Paso 1. Base de datos

En este tutorial, utilizaremos 3 bases de datos, 2 en MySQL y 1 en PostgreSQL, los nombres son laravel_dbalaravel_dbblaravel_dbc (perdón por la falta de imaginación). Todas las bases de datos tendrán la misma tabla con los mismos campos, esto para hacer el post más corto y entendible, obviamente en una aplicación real las bases de datos son independientes y pueden contener las tablas y campos que se requieran.

Por el momento solo se necesita crear las bases tanto en phpmyadmin como en pgadmin. Las tablas, campos y datos se crearan más adelante desde Laravel.

Paso 2. Variables de entorno (*.env)

El archivo *.env de Laravel nos proporciona las variables necesarias para configurar la conexión a una base de datos, sin embargo podemos modificar el mismo para «n» base de datos. Veamos como:

conexion a base de datos multiple

A:  Corresponde a la conexión a base de datos por defecto de Laravel (mysql) , introducimos los datos de configuración para nuestra primer base de datos como lo hacemos en cualquier otro proyecto.

B: Nuestra segunda base de datos, también esta en MySQL y utiliza los mismos datos de conexión que la primera, por lo que no es necesarios repetirlos, solo nos interesa especificar el nombre de la segunda base de datos, el cual es «laravel_dbb».

C: La última base de datos que utilizaremos esta en PostgreSQL, por lo cual requiere su propia configuración, introducimos los mismos en variables copiados de la primera conexión «A» pero añadimos terminaciones en _PG para poder diferenciarlos e identificarlos mejor.

Paso 2. database.php

Abrimos el archivo database.php de la carpeta config/ y podremos observar que la primera conexión a mysql prácticamente ya esta hecha por lo que no debemos tocar nada más.

desarrollo de app web con laravel

Para la segunda conexión, también en MySQL, solo debemos copiar el código (conexión a mysql)  anterior y realizar dos pequeños cambios. 1. La nueva conexión se llamara «mysql2«, o puede tener el nombre que quieras. Lo siguiente es indicar el nombre de la base de datos con DB_DATABASE2, variable que creamos en *.env.

conexiones multiples a base de datos

Finalmente para la tercera conexión a PostgreSQL (pgsql), solo debemos cambiar los parámetros de conexión por las variables creadas en *.env y terminadas en _PG.

database laravel pgsql mysql

Con todo esto ya tenemos configurado 3 conexiones a 3 bases de datos diferentes en Laravel, sin embargo el sistema solo utilizara la primera conexión por default ‘mysql‘ (línea 16), por lo que a continuación veremos como utilizar cada conexión independientemente.

Paso 3. Modelo y Controlador

Creamos un Controlador de recursos StudentController y un modelo Student.

Paso 4. Creación de Tabla Student y datos de prueba

Creamos una nueva migración con el nombre de CreateStudentsTable y añadimos el siguiente código en up():

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateStudentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('mysql')->create('students', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });

        Schema::connection('mysql2')->create('students', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });

        Schema::connection('pgsql')->create('students', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

Explicación: Creamos una tabla «Students» para cada conexión indicando el nombre y campos de la misma. La composición de la tabla no es relevante para el objetivo de este post y esta compuesto por un campo ID, name y timestamps.

A continuación creamos un Studentfactory con el siguiente código:

<?php

use Faker\Generator as Faker;

$factory->define(\App\Student::class, function (Faker $faker) {
    return [
        'name' => $faker->name
    ];
});

Finalmente creamos un StudentsTableSeeder y utilizamos el factory para crear datos de prueba para cada base de datos.

<?php

use Illuminate\Database\Seeder;
use App\Student;

class StudentsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(Student::class, 10)->connection('mysql')->create();
        factory(Student::class, 10)->connection('mysql2')->create();
        factory(Student::class, 10)->connection('pgsql')->create();
    }
}

El seeder del estudiante, debemos llamarlo desde el DatabaseSeeder de la siguiente manera:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(StudentsTableSeeder::class);
    }
}

Abrimos una consola y ejecutamos «php artisan migrate –seed», se crearan las tablas y datos en cada base de datos. Si tienes algún problema, revisa los pasos anteriores y si no, podrás ver algo como esto:

Tutorial Laravel Bolivia

Paso 5.  Test

Para terminar el tutorial, debemos implementar las llamadas a las conexiones en el controlador y mostrar los datos en la vista, para ello:

En la carpeta resources, renombra el archivo welcome.blade.php por index.blade.php y coloca el siguiente código:

<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
    </head>
    <body>
        <h3>Conexión MySQL N°1 (default)<h3>
        <table>
            <thead>
              <tr>
                <th>ID</th>
                <th>Nombre</th>                
              </tr>
            </thead>
            <tbody>
              @foreach($students as $student)
              <tr>
                <th>{{ $student->id }}</th>
                <td>{{ $student->name }}</td>                
              </tr>                               
              @endforeach  
            </tbody>
          </table>

          <h3>Conexión MySQL N°2<h3>
            <table>
                <thead>
                  <tr>
                    <th>ID</th>
                    <th>Nombre</th>                
                  </tr>
                </thead>
                <tbody>
                  @foreach($students2 as $student2)
                  <tr>
                    <th>{{ $student2->id }}</th>
                    <td>{{ $student2->name }}</td>                    
                  </tr>                               
                  @endforeach  
                </tbody>
              </table>

              <h3>Conexión PgSQL N°3<h3>
                <table>
                    <thead>
                      <tr>
                        <th>ID</th>
                        <th>Nombre</th>                
                      </tr>
                    </thead>
                    <tbody>
                      @foreach($students3 as $student3)
                      <tr>
                        <th>{{ $student3->id }}</th>
                        <td>{{ $student3->name }}</td>                        
                      </tr>                               
                      @endforeach  
                    </tbody>
                  </table>
    </body>
</html>

Básicamente la vista esta compuesta por 3 tablas para cada conexión las cuales reciben un array con los datos de los estudiantes.

Ahora en el archivo web.php de la carpeta routes coloca:

Route::get('/', 'StudentsController@index');

Finalmente en StudentsController, en la función index() coloca:

    public function index()
    {
        $students = Student::get();        

        $students2 = Student::on('mysql2')->get();        

        $students3 = Student::on('pgsql')->get();

        return view('index', ['students' => $students, 'students2' => $students2, 'students3' => $students3]);
        
    }

Explicación: Cuando utilizamos la conexión por defecto de laravel, emplea la primera conexión «mysql«, si necesitamos emplear otras bases de datos, debemos indicar el nombre de la conexión ya sea para «mysql2» o «pgsql«.

Tecnolocias de la Informacion y comunicacion TICS Bolivia

Eso es todo.

enjoy!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Programa en la nube sin instalar nada con repl.it

Programa en la nube sin instalar nada con repl.it

Repl.it es un proyecto de tres jóvenes emprendedores (Amjad, Haya, Maso), es un compilador en linea el cual te permite p...

Como saber el tipo de objeto que contiene un hashmap

Como saber el tipo de objeto que contiene un hashmap

La clase hashMap es muy util para almacenar objetos de la forma ( Clave, Objeto ), donde Clave es un identificador único...

Crea patrón de desbloqueo para tus app java

Crea patrón de desbloqueo para tus app java

El patrón de desbloqueo es una medida de seguridad que tienen algunos teléfonos inteligentes para evitar el acceso al di...

Convertir imagen a Base64

Convertir imagen a Base64

En este post vemos un ejemplo de como convertir un archivo de imagen en una cadena de texto codificado en Base64 aprovec...

Código Único de Factura en PHP

Código Único de Factura en PHP

Código Único de Factura para el Nuevo Sistema de Facturación Electrónica en Bolivia desarrollado en el lenguaje PHP 7 (H...

Yo quiero un mar para Bolivia

Yo quiero un mar para Bolivia

La Guerra del Pacífico, también denominada Guerra del Guano y el Salitre, fue un conflicto armado acontecido entre 1879...

Comparte lo que sabes

Categorias

Últimas entradas

Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Herramientas

Generador de Enlaces a Whatsapp