Usando .env
>=5,0
(Testado em 5.5) (Funciona em 8 )
Em
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret
DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret
Em
config/database.php
'mysql' => [
'driver' => env('DB_CONNECTION'),
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME_SECOND'),
'password' => env('DB_PASSWORD_SECOND'),
],
Observação: Emmysql2
se DB_username e DB_password forem iguais, você poderá usarenv('DB_USERNAME')
que é mencionado em.env
primeiras linhas.
Sem .env
<5.0
Definir conexões
app/config/database.php
return array(
'default' => 'mysql',
'connections' => array(
# Primary/Default database connection
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database1',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Secondary database connection
'mysql2' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database2',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
Esquema
Para especificar qual conexão usar, basta executar o
connection()
método Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Construtor de consultas
$users = DB::connection('mysql2')->select(...);
Eloquente
Defina a
$connection
variável em seu modelo class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Você também pode definir a conexão em tempo de execução através do
setConnection
método ou o on
método estático:class SomeController extends BaseController {
public function someMethod()
{
$someModel = new SomeModel;
$someModel->setConnection('mysql2'); // non-static method
$something = $someModel->find(1);
$something = SomeModel::on('mysql2')->find(1); // static method
return $something;
}
}
Observação Tenha cuidado ao tentar construir relacionamentos com tabelas em bancos de dados! É possível fazer, mas pode vir com algumas ressalvas e depende de qual banco de dados e/ou configurações de banco de dados você possui.
Do Laravel Docs
Usando várias conexões de banco de dados
Ao usar várias conexões, você pode acessar cada
connection
através do método de conexão no DB
fachada. O name
passado para a connection
deve corresponder a uma das conexões listadas em seu config/database.php
arquivo de configuração:$users = DB::connection('foo')->select(...);
Você também pode acessar a instância PDO bruta e subjacente usando o método getPdo em uma instância de conexão:
$pdo = DB::connection()->getPdo();
Links úteis
- Laravel 5 conexão de banco de dados múltiplo de
laracasts.com
- Conecte vários bancos de dados em laravel DE
tutsnare.com
- Várias conexões de banco de dados em Laravel DE
fideloper.com