Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Usando funções e subselects em critérios Olá, Uma funcionalidade já existente na versão 1.0.3, mas pouco explorada, é a possibilidade de usar subqueries e funções de banco na definição de critérios para busca de coleções na base de dados. Neste pequeno artigo, procurarei explicar estes dois recursos. O comportamento padrão da classe TFilter é tratar o terceiro parâmetro como um valor, adicionando "aspas" ao redor. Ent...
PD
Usando funções e subselects em critérios  
Fechado
Olá,

Uma funcionalidade já existente na versão 1.0.3, mas pouco explorada, é a possibilidade de usar subqueries e funções de banco na definição de critérios para busca de coleções na base de dados. Neste pequeno artigo, procurarei explicar estes dois recursos.

O comportamento padrão da classe TFilter é tratar o terceiro parâmetro como um valor, adicionando "aspas" ao redor. Entretanto, se o terceiro parâmetro iniciar com "(SELECT", ele é tratado como uma subquery, e portanto não serão acrescentadas "aspas" ao redor.

  1. <?php
  2. $criteria = new TCriteria;
  3. $criteria->add(new TFilter('id''IN''(SELECT customer_id FROM purchases)'));
  4. // resultado: (id IN (SELECT customer_id FROM purchases))
  5. ?>


Além disso, em alguns casos precisamos usar funções do banco de dados para efetuar comparações e outras operações. Neste caso, podemos forçar que o terceiro parâmetro não tenha "aspas" na composição do Select, por meio do acréscimo do prefixo NOESC: no terceiro parâmetro. Neste exemplo, a data de nascimento deve ser menor ou igual ao dia de hoje menos 2 anos.

  1. <?php
  2. $criteria = new TCriteria;
  3. $criteria->add(new TFilter('birthdate''<='"NOESC:date(now()) - '2 years'::interval"));
  4. // resultado: (birthdate <= date(now()) - '2 years'::interval)
  5. ?>

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (3)


FC

Ótimo artigo Pablo

Lembrando que para ordenar os dados (ORDER BY) segue o mesmo conceito:

  1. <?php
  2. $param['order'] = '(select customer from tbl_customer where customer_id = id)'
  3. ?>

PD

Obrigado Felipe,

Ah sim, você está se referindo à definir uma ordem padrão no onReload() das list controllers, como aqui:
www.adianti.com.br/framework_files/tutor/index.php?class=CustomerDat

Lembrando que a classe TCriteria tem o método setProperty() para definir a ordenação:
www.adianti.com.br/framework_files/tutor/index.php?class=CollectionL

Abraço,
Pablo
FS

Bom Dia Pablo,

E quando o campo tem na Classe e nao tem no BD, como funciona ???

Tens como nos ajudar ???

Aguardo Noticias

Grande abraço