DEV Community

WoneyBranga
WoneyBranga

Posted on

1

Trabalhando com multiplas databases no laravel

O laravel por padrao nos permite configurar 1 banco de dados.
Mas se quisermos usar 2 ou mais simultaneamente?!?
Como fazer isso, é o que apresentaremos aqui.

Fase 1 - configuração do acesso ao segundo banco.

no nosso .env vamos adicionar as configs de conexão do nosso segundo banco:

// .env

// exemplo da conexao defaut
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=lara10_estudos
DB_USERNAME=sail
DB_PASSWORD=password

// exemplo da conexão secundária
DB_BANCO2_CONNECTION=mysql
DB_BANCO2_HOST=mariadb
DB_BANCO2_PORT=3306
DB_BANCO2_DATABASE=banco2
DB_BANCO2_USERNAME=sail
DB_BANCO2_PASSWORD=password
Enter fullscreen mode Exit fullscreen mode

no nosso /config/database.php vamos adicionar um novo array de configuração de banco, e nomeá-lo como for de interesse.

// /config/database.php
   return [
// configuração do banco corrente
   'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
// configuração do novo banco
   'banco2' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_BANCO2_HOST', '127.0.0.1'),
            'port' => env('DB_BANCO2_PORT', '3306'),
            'database' => env('DB_BANCO2_DATABASE', 'forge'),
            'username' => env('DB_BANCO2_USERNAME', 'forge'),
            'password' => env('DB_BANCO2_PASSWORD', ''),
            'unix_socket' => env('DB_BANCO2_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
];
Enter fullscreen mode Exit fullscreen mode

Fase 2 - usando o nosso segundo banco

2.1 - Em uma migration

<?php

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

return new class extends Migration
{

    public function up(): void
    {
        Schema::connection('banco2')->create('tb_banco2_teste', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::connection('banco2')->dropIfExists('tb_banco2_teste');
    }
};

Enter fullscreen mode Exit fullscreen mode

2.2 - Em uma model

<?php

namespace App\Models;

class teste 
{
    protected $fillable = [
        'name'
    ];

    protected $connection = 'banco2';

}
Enter fullscreen mode Exit fullscreen mode

É isso!😎

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more