[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Thiago Luna de Melo
Criador Thiago Luna de Melo 01/07/2020

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();

 

Criador Thiago Luna de Melo 01/07/2020

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.

Thiago Luna de Melo
Manager Carlos Ferreira 01/07/2020

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.

Carlos Ferreira
Criador Thiago Luna de Melo 01/07/2020

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.

Thiago Luna de Melo
Manager Carlos Ferreira 01/07/2020

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.

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

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!