Base de dados continua como a primáriia
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
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)
}
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)
}
}
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.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!