[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
ANDRÉ IURY DINIZ MAFRA
Criador ANDRÉ IURY DINIZ MAFRA 19/09/2021

Olá, professor. Então, corri atrás disso na net antes de vir perguntar aqui, mas infelizmente não rolou. Fiz tudo como manda na aula, inclusive debuguei metodos e variáveis e nada.

Ná primeira imagem está a classe responsável por trocar a conexão, veja que deixei algumas linhas comentadas de debug. O que achei estranho é que no metodo reconnect quando debugado mostra como se a conexão tivesse sido trocada, no entanto, quando passo o dd na variavel valor, reclama que não existe a tabela de teste e passa o banco como sendo ainda o primário. Uma observação, estou utilizando a versão mais recente do laravel (8.xx). Desde já agradeço a atenção

 

 

 

Criador ANDRÉ IURY DINIZ MAFRA 19/09/2021
public function setConnection(Filial $filial){
DB::purge('tenant');
config()->set('database.connections.tenant.host',$filial->db_host);
config()->set('database.connections.tenant.username',$filial->db_username);
config()->set('database.connections.tenant.password',$filial->db_password);
config()->set('database.connections.tenant.database',$filial->db_database);

//dd(config()->get('database.connections.tenant'));
DB::reconnect('tenant');

//$valor = DB::table('teste')->select('testecol')->get();
//dd($valor);
Schema::connection('tenant')->getConnection()->reconnect();

//$valor = DB::table('teste')->select('testecol')->get();
//dd($valor);

// função para verificar se houve a conexão de fato (apenas para testes)

}
ANDRÉ IURY DINIZ MAFRA
Criador ANDRÉ IURY DINIZ MAFRA 19/09/2021

Consegui resolver desta maneira. Antes de setar a conexão para o tenant, me desconecto do banco principal. Porém não sei se essa seria  maneira correta.

 

Obs.: Ao invés do reconnect() usei o connection().



<?php


namespace App\Tenant;


use App\Models\Filial;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

class ConfigTenant
{
public function setConnection(Filial $filial){
DB::purge('tenant');
config()->set('database.connections.mysql.host',$filial->db_host);
config()->set('database.connections.mysql.username',$filial->db_username);
config()->set('database.connections.mysql.password',$filial->db_password);
config()->set('database.connections.mysql.database',$filial->db_database);

//dd(config()->get('database.connections.tenant'));

DB::disconnect('mysql');
DB::connection('tenant');

//$valor = DB::table('teste')->select('testecol')->get();
//dd($valor);
Schema::connection('tenant')->getConnection()->reconnect();

$valor = DB::table('teste')->select('testecol')->get();
dd($valor);

// função para verificar se houve a conexão de fato (apenas para testes)

}
}
ANDRÉ IURY DINIZ MAFRA
Manager Carlos Ferreira 19/09/2021

Olá, André!
Tudo bem?

Creio que está tudo certo.

Mas, se quiser postar o código no GitHub eu faço um checkup no código e valido se está tudo certo.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!