Query Builder UnionAll com Função de Callback
Olá, Mestre!
Pode dar uma luz?
Listar todos os usuários dos Tenants que estão em Schemas diferentes
DB::table("public.users")->select(['id', 'name', 'email'])
->unionAll(function ($query) use ($schemaTenants){
foreach ($schemaTenants as $key => $schema) {
$table = $schema->db_schema . '.users';
$query->unionAll(DB::table($table)->select(['id', 'name', 'email']));
}
})
->get();
Query gerada com o código acima:
(select "id", "name", "email" from "public"."users") union all ((select *) union all (select "id", "name", "email" from "admin_127"."users") union all (select "id", "name", "email" from "phpunit"."users") union all (select "id", "name", "email" from "t_127"."users") union all (select "id", "name", "email" from "local_host"."users"))
Na Query gerada tem um (( select * ) que está matando a execução e não consigo tirá-lo.
Olá, Thiago!
Tudo bem?
Você está usando o modelo multi-database, onde cada tenant tem o seu próprio banco?
Você usou como base o projeto do curso aqui da plataforma?
Só para mim saber mesmo, porque fica mais fácil eu te direcionar para um caminho mais simples.
Olá, Carlos!
Estou usando o modelo multi-database utilizando como base o projeto do curso aqui da plataforma.
A única mudança que fiz foi usar o Postgres e, ao invés de ter vários bancos, tenho um banco só com vários Schemas (1 para cada Tenant).
Isso me permite fazer consultas em todos os Tenants sem ter que ficar trocando de conexão.
E uma dessas consultas é listar todos os usuário de todos os Tenants. No SQL fica assim:
select id, name, email from schema1.users
union all (select id, name, email from schema2.users)
union all (select id, name, email from schema3.users)
Utilizei o Query Builder para fazer essa consulta, com uma funcão de callback para montar os Union All de acordo com a quantidade de Tenants que tenho cadastrado no banco.
E o resultado da query gerada é o que postei acima.
Olá, Thiago!
Você tem esse projeto no GitHub? Porque eu conseguiria simular o seu caso aqui e te orientar no melhor caminho.
Utilizando Raw SQL deu certo?
No aguardo.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!