Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar vários bancos de dados em Laravel

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: Em mysql2 se DB_username e DB_password forem iguais, você poderá usar env('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
  1. Laravel 5 conexão de banco de dados múltiplo de laracasts.com
  2. Conecte vários bancos de dados em laravel DE tutsnare.com
  3. Várias conexões de banco de dados em Laravel DE fideloper.com