✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Como usar o recurso de conexões múltiplas de banco de dados do Laravel em um site

711

Você está procurando conectar múltiplos bancos de dados ao seu aplicativo Laravel? Às vezes, você pode se deparar com uma situação em que precisa lidar com mais de um banco de dados. Neste artigo, estudamos como conectar e usar múltiplos bancos de dados no aplicativo Laravel. O Laravel fornece suporte para múltiplas conexões de banco de dados em seu próprio núcleo.

Normalmente, precisamos de um único banco de dados para um site. Mas, pode ser possível que você tenha que armazenar alguns dados sobre seu aplicativo em outro banco de dados. Trabalhei em um projeto de comércio eletrônico em que queríamos enviar os detalhes do pedido para um banco de dados separado. No seu caso, os requisitos podem ser diferentes.

Dito isso, vamos dar uma olhada em como conectar e usar múltiplos bancos de dados com o Laravel.

Adicionar várias conexões de banco de dados no Laravel

Como eu disse, o Laravel permite que você conecte múltiplos bancos de dados. Podemos usar uma plataforma de banco de dados diferente como SQLite, MySQL, SQLSRV com Laravel. Para este tutorial, vou usar outra instância do MySQL de um banco de dados separado. Em outras palavras, vamos lidar com um banco de dados MySQL separado como armazenamento adicional.

O Laravel armazena uma conexão de banco de dados no config/database.phparquivo. Para adicionar outra conexão do MySQL, temos que modificar este arquivo.

Vamos adicionar outra conexão chamada ‘mysql2’. Você pode dar qualquer outro nome a esta conexão. Apenas certifique-se de usar o mesmo nome ao interagir com o banco de dados.

config / database.php

<?php
 
use IlluminateSupportStr;
 
return [
    ...
 
    'connections' => [
        ...
        ...
        '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'),
            ]): [],
        ],
 
        'mysql2' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST_2', '127.0.0.1'),
            'port' => env('DB_PORT_2', '3306'),
            'database' => env('DB_DATABASE_2', 'forge'),
            'username' => env('DB_USERNAME_2', 'forge'),
            'password' => env('DB_PASSWORD_2', ''),
            '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'),
            ]): [],
        ],
    ]

No código acima, a conexão ‘mysql’ é a padrão. Eu adicionei uma nova conexão ‘mysql2’ com diferentes constantes. Aqui, passei as constantes como DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2, etc. Se seu banco de dados estiver hospedado em outro servidor, você deve alterar as chaves de DB_HOST_2 e DB_PORT_2 também. Presumo que os dois bancos de dados estejam no mesmo servidor. Portanto, não estou alterando os valores dessas constantes.

O Laravel obtém os valores dessas constantes usando o env()método. Isso significa que devemos adicionar outros detalhes do banco de dados em um arquivo ‘.env’ como abaixo.

DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=
DB_USERNAME_2=
DB_PASSWORD_2=

Após realizar os passos acima, terminamos de conectar outro banco de dados no Laravel. A próxima coisa é interagir com este banco de dados.

Execute a migração em outro banco de dados no Laravel

Quando se trata de Laravel, devemos sempre criar tabelas no banco de dados usando Migrações. Digamos que queremos criar uma tabela de ‘produtos’ em nosso banco de dados separado. Execute o comando abaixo que criará um arquivo de migração.

php artisan make:migration create_products_table

Ele criará um novo arquivo dentro do diretório ‘banco de dados / migrações’. Abra o arquivo no editor e passe a conexão recém-criada conforme mostrado abaixo.

<?php
 
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
 
class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('mysql2')->create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
    }
 
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::connection('mysql2')->dropIfExists('products');
    }
}

Passei o valor ‘mysql2’ para o connectionmétodo da Schemaclasse. Isso significa que quando você executa o comando migrate, este código executa o código acima no outro banco de dados cuja string de conexão foi passada.

php artisan migrate

Depois de executar o comando acima, vá para o seu segundo banco de dados. Agora deve ter uma tabela de ‘produtos’.

Executar consultas em outro banco de dados

No Laravel, você pode interagir com o banco de dados através de um Query Builder ou usando o Eloquent ORM.

DBfachada fornece um método chamado conexão que é usado para executar consultas em outro banco de dados. Vamos escrever uma consulta na conexão ‘mysql2’ usando um Query Builder.

$products = DB::connection('mysql2')->select('SELECT * FROM products');
$products = DB::connection('mysql2')->select('SELECT * FROM products where id = ?', [1]);

O Query Builder executará automaticamente as consultas acima no outro banco de dados, fazendo referência ao método de conexão.

Quando se trata do Eloquent, existem 2 maneiras de conectar bancos de dados separados. A primeira maneira é usar a $connectionvariável dentro de sua classe Model.

<?php
 
namespace AppModels;
 
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
 
class Product extends Model
{
    use HasFactory;
 
    /**
     * The connection name for the model.
     *
     * @var string
     */
    protected $connection = 'mysql2'; //pass the connection name here
}

Agora, o modelo ‘Produtos’ lidará apenas com o segundo banco de dados.

Na segunda opção, você pode criar uma conexão em tempo real sempre que necessário. Dessa forma, você pode interagir com vários bancos de dados a partir de um único modelo.

<?php
...
use AppModelsProduct;
 
class ProductController extends Controller
{
    public function index()
    {
        $product = new Product;
        $product->setConnection('mysql2');
        $arr_product = $product->find(1);
        dd($arr_product);
    }
}

Aqui, eu configurei o tempo de execução da conexão usando o setConnection()método.

É isso! Espero que você entenda como conectar múltiplos bancos de dados no aplicativo Laravel. Por favor, compartilhe seus pensamentos e sugestões na seção de comentários abaixo.

Artigos relacionados

Fonte de gravação: artisansweb.net

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação