FILTROS EM OUTRAS TABELAS - Exemplo pequeno Olá a todos, gostaria de saber como faço para DEFINIR FILTROS (usando a classe TFilter) para retornar Registros que estão em outras tabelas. Exemplo: Tenho a tabela CANDIDATO que está ligada a tabela CIDADE que por sua vez está ligada a tabela ESTADO, gostaria de fazer um reporitory (TRepository) para acessar a tabela CANDIDATO e retornar TODOS os CANDIDATOS do CEARÁ, por exemplo. A represen...
LL
FILTROS EM OUTRAS TABELAS - Exemplo pequeno  
Olá a todos, gostaria de saber como faço para DEFINIR FILTROS (usando a classe TFilter) para retornar Registros que estão em outras tabelas. Exemplo: Tenho a tabela CANDIDATO que está ligada a tabela CIDADE que por sua vez está ligada a tabela ESTADO, gostaria de fazer um reporitory (TRepository) para acessar a tabela CANDIDATO e retornar TODOS os CANDIDATOS do CEARÁ, por exemplo. A representação do banco está na imagem Candidato - Estado.JPG. Dês de Já agradeço!

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (4)


LL

Para retornar as CIDADES de acordo com um filtro consegui usando o seguindo código:
 
  1. <?php
  2. $filter = new TFilter('(SELECT nome_cidade from cidade WHERE cidade.id = candidato.cidade_id)', 'like', "{$data->cidade}%");
  3. ?>


Mas o problema em retornar todos os CANDIDATOS de um estado continua, tentei usar esse código:
 
  1. <?php
  2. $filter = new TFilter('(SELECT es.nome_estado
  3. from estado es
  4. join cidade ci
  5. on es.id = ci.estado_id
  6. join candidato ca
  7. on ca.cidade_id = ci.id)',
  8. 'IN', "{$data->estado}");
  9. ?>

pensei que iria funcionar, mas não funcionou
NR

A ligação do filtro com a tabela de candidatos precisa ser feita fora do subselect. Ex:
 
  1. <?php
  2. $filter = new TFilter('cidade_id','in',"(SELECT ci.id
  3. from estado es
  4. join cidade ci
  5. on es.id = ci.estado_id AND
  6. es.nome_estado = '{$data->estado}')");
  7. ?>


Mas se você tiver vários casos de filtros dessa maneira, talvez seja melhor criar uma view fazendo todos esses cruzamentos e utilizá-la como repositório.
LL

Nataniel Rabaioli, fico muito grato por ter tirado um tempinho para me ajudar, mas não entendi o filtro, poderia me explicar o que esse filtro que vc criou esta filtrando? Não estou conseguindo entender por favor me ajude!
NR

Lucas, em caso de dúvidas referentes ao sql gerado você pode usar o comando abaixo. Ele exibe em tela todos os sqls da sua transação:
 
  1. <?php
  2. TTransaction::setLogger(new TLoggerSTD());
  3. ?>

O filtro que te passei gera o seguinte sql:
SELECT * from candidato where cidade_id in (SELECT ci.id from estado es join cidade ci on es.id = ci.estado_id AND es.nome_estado = 'RS')