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 connection
propriedade 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 Pogi
use 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 User
em 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();
$user
irá começar a usar a conexão chamada ‘another-db’, enquanto $users
irá 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 é?