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

Agregar tablas a los items de un JComboBox

Agregar tablas a los items de un JComboBox

En este post personalizaremos un componente JComboBox para que sus elementos acepten tablas (JTable) en lugar de texto s...

Encriptación por el método bífido

Encriptación por el método bífido

El método Bífido es un cifrado fraccionario. Es decir que cada letra viene representada por una o más letras o símbolos,...

Crea tu propia aplicacion para realizar llamadas

Crea tu propia aplicacion para realizar llamadas

En este tutorial Android Bolivia 🙂 construiremos una sencilla aplicación para realizar llamadas por teléfono, aprenderem...

Cargar fuente TTF

Cargar fuente TTF

Necesitamos: Android Studio 2 tipos de fuente TTF Agregar Archivo de fuente al proyecto Paso 1: Crear carpeta assets Cli...

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

Terminator: Terminal multiventanas para Linux

Terminator: Terminal multiventanas para Linux

Cada versión de Linux viene con su propia terminal predeterminada para interactuar con el Sistema Operativo a través de...

Comparte lo que sabes

Categorias

Últimas entradas

El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...

WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...

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

Herramientas

Generador de Enlaces a Whatsapp