Reconecção e consulta no banco primario toda hora
Seguinte, eu tenho o seguinte problema.
Banco A (configuração dos meus clientes)
Banco B (Banco dos clientes)
Ao abrir a rota /login ele acessa o TenantManager.php e faz toda a conexão no banco do cliente, porém quando eu dou o post, ele tenta reconectar no "Banco A" e se perde, uma vez que já estava conectado no "Banco B" como solucionar isso?
Salve Diego!
Como vai?
Qual foi o método que você usou para identificar o tenant? :)
No formato que aplicamos no curso, baseado no domínio esse problema não acontece, porque uma vez estando acessando o sistema pelo domínio X, só consegue ter acesso ao banco ligado ao domínio em questão.
Então, em tese ele não passa pelo ManagerTenant.php em todas as requisições?
Se você definiu o middleware no arquivo Kernel.php (app/http/Kernel.php) registrando o Middleware global, no array $middleware, e nesse Middleware global (TenantMiddleware) usa o ManagerTenant.php, sim, o ManagerTenant passa em todas as requisições.
No projeto do curso funcionou assim!
Lembrando que a classe ManagerTenant tem apenas os métodos úteis para alternar a conexão com o banco de dados, quem realmente usa essa classe é o Middleware global TenantMiddleware.
Qual foi o metodologia que você usou para identificar o tenant?
No projeto identificamos o tenant a partir do domínio.
Certo, eu identifiquei via subdominio.
A situação que estou passando é assim, quando eu acesso o subdominio especifico, eu acesso e conecto no banco, porém depois de conectado já no banco do cliente ele tenta reconectar no banco geral que eu tenho a tabela de configuração...
Existe alguma forma de resolver isso seguindo essa estrutura do curso?
Muito provavelmente o seu Middleware de identificação do subdomínio ficou errado, porque deve funcionar exatamente como fizemos nesse sistema:
Uma vez que acessou a aplicação pelo dominiox.com.br não tem volta, o Middleware faz alternar a conexão correspondente ao dominiox.
Mesmo que a identificação seja por subdomínio tem funcionar (igual está a aplicação do curso, que funciona perfeitamente!). Porque ao acessar com o subdomínio exemplo.dominio.com e o Middleware identificar o subdomínio exemplo e alternar a conexão, não tem mais volta.
Se quiser compartilhar comigo o código do Middleware ou todo o código no GitHub, posso analisar e dizer onde você está errado!
Beleza, segue ai o repositorio;
https://github.com/hananiamizrahi/multiTenant
O grande ponto é no seu Middleware TenantMiddleware, é nele que valida qual o subdomínio que acessou e alterna a conexão. Se algo estiver errado aqui, no momento de identificar o tenant, tudo sai errado.
O seu método getCompany retorna a empresa corretamente?
Digo, se acessar sub01.dominio.com retorna a empresa correta?
E se acessar sub02.dominio.com retorna a empresa correta?
O grande ponto está nesse if que fez no Middleware que não está se encontrando.
Em que situação não encontra perde a conexão? Quando faz alguma requisição post?
no else if deixa um debug:
// $manager->setConnection($company);
dd($company);
Se não conseguir identificar vou baixar o projeto e testar diretamente.
No aguardo.
Então, ele encontra sim, e conecta no banco do sub01.dominio.com, quando acesso sub02.dominio.com ele também encontra.
O problema acontece quando eu acesso uma tela qualquer.
Vou tentar escrever o caso completo
tento acessar a tela de login, acessa o banco GERAL, procura o company, acha o company, seta as informações de conexão, conecta, mostra a tela, Ai eu digito as informações de acesso (relacionado ao banco do sub01.dominio.com) e ele diz "Não encontrei tabela de company no banco do cliente".
A sensação que eu tive é que ele tenta encontrar o cliente no banco GERAL para cada requisição que eu faça, porém ele já não está mais no banco GERAL, mas sim no banco do subdominio que estou usando, certo?
Errado. Algum processo ficou errado, porque uma vez conectado ao tenant não precisa consultar novamente a tabela companies do banco de dados principal.
Como viu ao longo do curso, as aplicações no modelo aplicado no curso funcionaram perfeitamente.
Vou baixar o seu projeto e analisar os detalhes para identificar onde errou, faça isso amanhã. Se até amanha (01/11) eu não te retornar me envia um e-mail para [email protected] me cobrando. Ok?
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!