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

Creación y uso de parametros en Jaspersoft Studio

Creación y uso de parametros en Jaspersoft Studio

Hola 🙂 En este video tutorial veremos como crear y usar parámetros en reportes con JasperSoft Studio, la base de datos q...

Leer datos de un REST API con VUE

Leer datos de un REST API con VUE

En este post realizaremos un proyecto en VUE que se conectara a un REST API  y utilizara un servicio del mismo para obte...

Reconocimiento facial con php

Reconocimiento facial con php

Inspeccionando los cientos de marcadores que tenia en mi firefox, me encontre un enlace web con una interesante clase pa...

Exportar registros MySQL a Excel

Exportar registros MySQL a Excel

Java Excel API es un API para java que permite a los desarrolladores leer y escribir en hojas de cálculo Excel. jexcelap...

Tabla con imagen de fondo

Tabla con imagen de fondo

En este post personalizaremos una tabla JTable Swing para pintar una imagen de fondo y darle un poco de estilo al encabe...

Crear un plugin wordpress «Banned Word»

Crear un plugin wordpress «Banned Word»

En este post, escribiremos un sencillo plugin para wordpress el cual consistirá en reemplazar palabras en los comentario...

Comparte lo que sabes

Categorias

Últimas entradas

Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...

TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...

Una clase JTree permite mostrar datos de una forma jerárquica y en realidad este objeto no contiene sus datos; es decir,...

Los archivos digitales (txt, docx, xlsx, odt, odp, pdf, etc) nos permiten almacenar información el cual en ocasiones, de...

Herramientas

Generador de Enlaces a Whatsapp