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

Conexión a MySQL con PDO

Conexión a MySQL con PDO

¿Que es PDO? PHP Data Objects (o PDO) es una extensión que provee una capa de abstracción de acceso a datos para PHP 5,...

Validación XML con Esquema XSD en PHP

Validación XML con Esquema XSD en PHP

En este post realizaremos un pequeño ejemplo de validación de archivos XML utilizando el esquema XSD y el lenguaje PHP (...

MVC Java y Base de Datos Tutorial

MVC Java y Base de Datos Tutorial

En post pasados [Ejemplo práctico de MVC java Swing con Netbeans, 3 en raya java con MVC y Netbeans , MVC: Modelo, Vista...

Incrustar reporte en formulario java

Incrustar reporte en formulario java

Jasperreport nos brinda su propio visor de reportes, sin embargo en ocasiones queremos mostrar los informes directamente...

Componente swing jcMousePanel v1.6.9

Componente swing jcMousePanel v1.6.9

Agregar una imagen a un jpanel o a un jframe no es complicado pero para un programador novato puede convertirse en todo...

Efecto Taringa! en vivo

Efecto Taringa! en vivo

En la pagina de Taringa, existe una sección donde se puede ver lo que pasa en ese foro al momento, «Taringa! en vivo» se...

Comparte lo que sabes

Categorias

Últimas entradas

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,...

En este tutorial conoceremos una forma de conectar una aplicación en Laravel con tres bases de datos diferentes, 2 en My...

Herramientas

Generador de Enlaces a Whatsapp