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 classeTCriteria, é ele que vai receber todos os filtros desejados:
TFilter no $criteria. Nos filtros devemos informar:
- Variável (normalmente uma coluna);
- Operador;
- Valor.
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çãogetObjects($criteria) de forma estática em um modelo.
Veja um exemplo completo abaixo, filtrando por idade, sexo e nome:
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çãosetProperty(). Veja um exemplo abaixo, onde são selecionados 10 funcionários ordenando pelo código ID pulando os 10 primeiros:
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 operadorE 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().
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 oBETWEEN.
Between
Procurar funcionários que tenham idade entre 16 e 60 anos:
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:
9.5. Como usar operadores E e OU ao mesmo tempo?
Para utilizar os operadoresE 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.
- Primeiro critério: sexo feminino e menos de 20 anos;
- Segundo critério: sexo masculino e menos de 17 anos.
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: