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

Modificar las pestañas de JTabbedPane

Modificar las pestañas de JTabbedPane

En este tutorial veremos lo fácil que es personalizar las pestañas de un JTabbedPane con unas cuantas lineas de código y...

JSCRUM .:. Gestor de Proyectos

JSCRUM .:. Gestor de Proyectos

¿Qué es SCRUM? SCRUM es un modelo de referencia que define un conjunto de prácticas y roles, y que puede tomarse como pu...

Guardar reporte PDF directamente con Jasperreports

Guardar reporte PDF directamente con Jasperreports

Guardar un reporte PDF creado en iReport no es tan diferente de solo visualizarlo en pantalla. En este ejemplo se hace u...

Como paginar registros en Java/Access

Como paginar registros en Java/Access

En este post veremos una forma de realizar la paginación en una base de datos Access utilizando el lenguaje de programac...

Métodos Numéricos: Sustitución Directa

Métodos Numéricos: Sustitución Directa

El Método de Sustitución Directa básicamente consiste en asumir un valor, reemplazar el mismo en la función despejada y...

Animación de bicho feo en java2D

Animación de bicho feo en java2D

Java2d nos permite manipular imagenes y asi poder crear animaciones sencillas como muestra el siguiente video. Puedes de...

Comparte lo que sabes

Categorias

Últimas entradas

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

En este post crearemos un botón swing que reproducirá un sonido cuando este sea presionado por el usuario.  Sin mas que...

Muchas veces necesitamos de fotos para adornar nuestros perfiles en RRSS pero no queremos subir nuestras propias fotos p...

En esta ocasión aprenderemos a conectaros con una base de datos Oracle desde Laravel. Es un tutorial sencillo y cortito,...

Herramientas

Generador de Enlaces a Whatsapp