Especificando conexões de banco de dados no Laravel

No meio de um projeto, fui atingido durante uma discussão com meu cliente. Exceto que estarei usando MSSQL em vez do MySQL usual para os bancos de dados, não fui informado para usar três bancos de dados para os três despejos sql separados que ele me enviou.

Ah, a propósito, o banco de dados do meu cliente usa o nome de usuário de uma conta como chave primária. Quão legal é isso?

Chega de minha história misteriosa.


Existem diferentes maneiras de fazer o Schema Builder , Query Builder (Fluent), Eloquent usar uma conexão diferente em comparação com o padrão definido nas configurações do banco de dados (que está em root/app/config/database.php).


Aqui está uma visão geral

1. Configurações

2. Eloquente

  • Configurando a conexão padrão a ser usada pelo modelo

  • Usando os diferentes métodos fornecidos pelo Eloquent (‘on’, ‘resolveConnection’, ‘setConnection’)

3. Schema Builder

4. Construtor de consultas


Vamos começar criando nossas próprias conexões.

Este é o nosso padrão database.php(encontrado em app/config)

Podemos simplesmente adicionar nossa própria conexão, simplesmente adicionando novas linhas de código dentro da matriz de conexões. Eu prefiro colocar as conexões personalizadas abaixo das conexões padrão fornecidas pelo Laravel.

Aqui está um exemplo


<?php
return array(
'connections' => array(

// ... Laravel's default connection

// My custom connections
'sqlite' => array(
'driver' => 'sqlite',
'database' => __DIR__.'/../database/production.sqlite',
'prefix' => '',
),

'my-db' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'my-db',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),

'another-db' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'another-db',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),

),
)

Vamos começar com o Schema Builder.

Para migrar uma tabela para um banco de dados específico diferente do padrão, você simplesmente usa o método.connection()

$connection = sample’;

Schema::connection($connection)->create(function(Blueprint $table) {

//

});

Fácil? Sim, foi o inferno.

Desta vez, por que não tentamos a mesma coisa, mas desta vez, com nossos modelos Eloquent?

É muito fácil também.

Podemos alterar a conexão padrão usada por todo o modelo em si. Isso significa que todas as consultas usando o modelo começarão a usar a conexão que definimos. Podemos conseguir isso alterando a connectionpropriedade que está configurada para a conexão padrão por padrão no Eloquent.

Basta adicionar uma propriedade para substituir o padrão.

class Pogi extends Eloquent {

protected $connection = my-db’;

}

Isso faz com que o modelo Pogiuse a conexão existente . Se essa conexão não existir, uma exceção será lançada. Não se preocupe em quebrar seu aplicativo!my-db

Outra forma seria usar o método ‘on’, que também está disponível por padrão no Eloquent. Vamos usar um modelo chamado Userem nosso exemplo e a conexão chamada .my-db

class UserCtrl extends BaseController {

public function show()
{
$user
= User::on(‘my-db’)->find(1);
}
}

A conexão nomeada será usada somente nesta execução. Isso significa que, se tentarmos fazer:my-db

$user = User::on(‘another-db’)->find(1);

$users
= User::all();

$userirá começar a usar a conexão chamada ‘another-db’, enquanto $usersirá usar a conexão padrão definida nas configurações.

Com o Query Builder, também é moleza.

Simplesmente usando o mesmo método: connection.

// connection name

$connection
= sample’;

$db
= DB::connection($connection)

// do something

O Laravel torna isso muito limpo e fácil.

Fácil e limpo, não é?