Lançado Adianti Framework 7.6!
Clique aqui para saber mais
DBMultiSearch com Criteria usando OR Tentei fazer um filtro usando OR, mais não esta dando certo: ...
LC
DBMultiSearch com Criteria usando OR  
Tentei fazer um filtro usando OR, mais não esta dando certo:
  1. <?php
  2.         $criteria_pessoa_id = new TCriteria();
  3.         $filterVar "0";
  4.         $criteria_pessoa_id->add(new TFilter('pessoa_id''='$filterVar)); 
  5.         $filterVar NULL;
  6.         $criteria_pessoa_id->add(new TFilter('pessoa_id''is'$filterVar), TExpression::OR_OPERATOR); 
  7.         echo $criteria_pessoa_id->dump();
  8. ?>

O echo retornou exatamente o que preciso: (pessoa_id = '0' OR pessoa_id is NULL)
Mais conforme vai digitando esta trazendo todos os registros com pessoa_id igual a NULL e não faz a filtragem

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


NR

Não entendi Leandro, não está correto trazer registros com pessoa_id = NULL?
LC

Traz sim os registro.
Mais conforme vai digitando para filtrar, vai trazendo registro que já estão fora do que foi digitado.
No exemplo que estou testando o SQL me retorna 3 registro:
Bertrano Pessoa da Goiabeira
Ciclano Pessoa da Seringueira
Fulano Pessoa do Pepino Japones

Quando digito ciclano para filtra, o fulano também aparece, neste caso não teria que ficar só o ciclano ?
NR

Entendi, tente o seguinte:
  1. <?php
  2. // criacao da $criteria_pessoa_id como feito anteriormente
  3. ...
  4. $criteria_ms = new TCriteria();
  5. $criteria_ms->add($criteria_pessoa_id);
  6. ...
  7. // passar $criteria_ms para o tdbmultisearch
  8. ?>
LC

Eu que não entendi agora o seu comando, rsrsrs.
Mais seria para fazer o filtro sem usar OR ?
Eu fiz o filtro usando só pessoa_id is null, ai funciona normal.
  1. <?php
  2.         $criteria_pessoa_id = new TCriteria();
  3.         $filterVar NULL;
  4.         $criteria_pessoa_id->add( new TFilter('pessoa_id''is'$filterVar) ); 
NR

É, ficou confuso :)
Você vai continuar usando o OR, mas com a diferença que agora seu criteria vai estar completamente isolado das demais regras. Pelo que vi, nas versões anteriores do framework a consulta ficaria da seguinte forma(considerando também as letras digitadas):

SELECT ... WHERE (pessoa_id = '0' OR pessoa_id is NULL AND nome like '%letras_digitadas%' OR id = letras_digitadas)

Agora, na versão 5 ou criando outro criteria como expliquei anteriormente, ficaria assim:

SELECT ... WHERE ( (pessoa_id = '0' OR pessoa_id is NULL) AND (nome like '%letras_digitadas%' OR id = letras_digitadas) )

Ou seja, a criteria inicial passada como parâmetro fica isolada dos outros filtros criados dinamicamente, e isso evitaria problemas com o OR.
LC

Entendi.
Primeiro faz uma criteria com o OR
Depois adiciona esta criteria dentro de uma outra criteria
Usa essa outra criteria no tdbmultisearch

DEU CERTO.

Obrigado.