Skip to main content
A classe TCriteria é um contêiner de filtros recursivo, ou seja, objetos dessa classe se comportarão como contêineres para a composição de filtros recursivos. Um objeto de critério pode receber filtros ou outros objetos de critérios. Ao carregar coleções com a API de critérios, é possível fazer todos os carregamentos estáticos e mais. Veremos em alguns exemplos mais à frente. O carregamento de coleções por API de critérios não permite a seleção de colunas, todos os atributos definidos no modelo serão carregados.

9.1. Como é feita a montagem dos filtros?

O primeiro passo para usar a API de critérios e criar um objeto da classe TCriteria, é ele que vai receber todos os filtros desejados:
Para adicionar filtros, devemos adicionar objetos da classe TFilter no $criteria. Nos filtros devemos informar:
  1. Variável (normalmente uma coluna);
  2. Operador;
  3. Valor.
Veja um exemplo onde o filtro procura apenas registros do sexo masculino:
À primeira vista, pode parecer complicado, no entanto, o uso de filtros é bastante simples e direto. E para adicionar outros ‘N’ filtros, basta que eles sejam adicionados:

9.2. Como carregar uma coleção?

O desenvolvedor pode adicionar quantos filtros forem necessários e usar o critério para carregar múltiplas vezes. Para usar o contêiner de filtros, basta usar a função getObjects($criteria) de forma estática em um modelo. Veja um exemplo completo abaixo, filtrando por idade, sexo e nome:
O comando SQL gerado foi:

9.3. Como ordenar um carregamento?

É possível adicionar algumas propriedades no carregamento de objetos usando a API de critérios, elas são adicionadas com a função setProperty(). Veja um exemplo abaixo, onde são selecionados 10 funcionários ordenando pelo código ID pulando os 10 primeiros:
O comando SQL gerado foi:
Posso usar filtros e propriedades ao mesmo tempo? Sim, é possível usar os dois ao mesmo tempo sem o menor problema.

9.4. Como usar o operador OU?

Como pode ser visto nos exemplos anteriores, ao adicionar mais de um filtro, o Adianti Framework usa o operador E para uni-los. É possível criar um critério usando o operador OU, para isso, precisamos adicionar uma cláusula com o operador desejado após o filtro dentro da função add().
O comando SQl gerado foi:

9.5. Como usar: BETWEEN, IN e NOT IN

Quando utilizamos uma API de critérios, é possível de maneira facilitada trabalhar com outros tipos filtros como o BETWEEN. Between Procurar funcionários que tenham idade entre 16 e 60 anos:
O comando SQL gerado foi:
IN e NOT IN Dentro de um critério, ao usar um operador IN ou NOT IN, é possível passar um vetor de valores para que sejam comparados. Veja esta situação: Carregar todos os funcionários que tenham 22, 24 e 26 anos e não os que tenham 25:
O comando SQL gerado foi:
Subslects Em carregamentos mais complexos, às vezes se faz necessário usar uma subconsulta, e isto pode ser adicionado em um critério. A subconsulta deve ser colocada na terceira coluna do filtro, um exemplo seria carregar todos os clientes cadastrados que já tenham realizado uma compra:
O comando SQL gerado foi:

9.5. Como usar operadores E e OU ao mesmo tempo?

Para utilizar os operadores E e `OU´ ao mesmo tempo, é necessário criar um critério composto, ou seja, um critério que irá receber outros dois critérios. Neste exemplo, queremos carregar os funcionários que forem do sexo feminino E tenham menos de 20 anos OU funcionários que forem do sexo masculino e tenham menos de 17 anos. Para realizar esse carregamento, primeiro criaremos dois critérios (um para cada metade dos nossos critérios), depois criaremos um terceiro que unirá os dois primeiros.
  1. Primeiro critério: sexo feminino e menos de 20 anos;
  2. Segundo critério: sexo masculino e menos de 17 anos.
Os critérios ficaram assim:
Com os dois primeiros critérios criados, precisamos apenas unir eles com o operador OR, e para isso, criaremos mais um critério, só que ao invés de adicionarmos filtros, adicionaremos o $criteria1 e o $criteria2 a ele. Além de adicionar os critérios, iremos informar sob qual operador os mesmos devem ser comparados:
O código PHP completo ficou assim:
O comando SQL gerado foi: