Blog Bugginho Academy

Trabalhando com mais de um banco de dados no Laravel

Apesar de não ser algo tão comum, as vezes nos deparamos com a situação de precisar acessar mais um banco de dados na mesma aplicação. Muitas pessoas acham que não é possível, mas sim, é possível acessar mais de um banco de dados com o Laravel framework e é isso que veremos a seguir.

Instalação / Configuração

O primeiro passo é instalarmos o Framework em nosso ambiente de desenvolvimento. Abre o seu terminal ou cmd, navegue até a diretório onde você deseja instalar a Laravel e execute o seguinte comando

Após alguns minutos o última versão do Laravel estará instalada no diretório escolhido

Até o momento em que esse post foi escrito, a última versão estável do Laravel é a 5.4

Caso queira instalar uma versão diferente do Laravel, informe uma string no final da linha acima com a versão desejada. Exemplo: “5.3.*”

Carregue o diretório “blog” em sua IDE ou Editor de código favorito e abra o arquivo “.env”, localizada na raiz do projeto. Por padrão o Laravel já traz uma sugestão de dados de conexão para o MySQL

Supondo que você já criou seus dois bancos de dados, vamos realizar algumas alterações nesse bloco de código

Note que criamos mais uma conexão, a “mysql2”. Ela aponta para o nosso segundo banco de dados 🙂

Agora que já definimos os dados em nosso arquivo “.env”, vamos abrir o arquivo “config/database.php”. Note que temos alguns arrays, um deles com as configurações de conexão do MySQL, configurações essas setadas em nosso “.env”. Vamos duplicar esse Array.

Acessando as conexões nos Models

Prontinho, agora que já temos nossas conexões configuradas, precisamos apenas acessa-las. Para acessar cada um dos bancos de dados, basta se referenciar às conexões que criamos. Você pode usar via Facade Schema, via DB ou pelo Eloquent. Vamos ver como fazer pelo Eloquent, que é provavelmente o método mais comum.

Pala ilustrar, crie 2 tabelas em seu banco de dados “customers” e “providers” e crie 2 Models no Laravel, com o código abaixo

Model Customer

Model Provider

Prontinho, você já pode obter dados de ambas as conexões, para ver em funcionamento, vamos criar um Controller chamado “ContactsController” conforme mostra o código abaixo

Em nosso arquivo de rotas “routes/web.php” vamos criar a seguinte rota

Agora basta subir nosso Built-in server

E acessar a URL

http://localhost:8000/teste

Se não aparecer nenhum registro, certifique-se que você populou as tabelas 😉

Espero que esse post tenha sido útil para você, amiguinho

Até a próxima!!!

Paulo Reis

9 comentários

  • E se eu fizer tudo isso mas quando for inserir ele ainda tentar usar a connection 1? alguma ideia do que pode ser?
    Dei override no $connection, a connection ta registrada no config/database.php certinho, mas mesmo assim, no create, ele tenta inserir na tabela usando a connection 1.

  • Boa Noite Paulo.

    Tive o mesmo problema configurei os bancos mais quando gero a consulta ele procura somente no primeiro banco ex:

    SQLSTATE [42S02]: tabela base ou vista não encontrada: 1146 A tabela ‘conexao1.positions’ não existe (SQL: selecione * de posições)

  • Boa tarde Paulo.

    Tem algum mistério para acessar um dos bancos remotamente, já conectei com navcat normalmente mais quando tento pelo laravel diz que meu usuário do banco não tem acesso mais esta com privilégios full.

    pode me ajudar

    • Aqui funciona normalmente, mas pode ser alguma configuração do seu ambiente de desenvolvimento, já que já vi algumas pessoas comentando sobre esse mesmo problema. Eu particularmente não sei lhe responder, já que nunca passei por isso, então aconselho que poste sua dúvida na comunidade Laravel Brasil ou no StackOverflow, acho que será mais fácil obter a resposta. Valeu!!! 😉

Your Header Sidebar area is currently empty. Hurry up and add some widgets.