LC
DBMultiSearch com Criteria usando OR
Tentei fazer um filtro usando OR, mais não esta dando certo:
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
- <?php
- $criteria_pessoa_id = new TCriteria();
- $filterVar = "0";
- $criteria_pessoa_id->add(new TFilter('pessoa_id', '=', $filterVar));
- $filterVar = NULL;
- $criteria_pessoa_id->add(new TFilter('pessoa_id', 'is', $filterVar), TExpression::OR_OPERATOR);
- echo $criteria_pessoa_id->dump();
- ?>
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
Não entendi Leandro, não está correto trazer registros com pessoa_id = NULL?
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 ?
Entendi, tente o seguinte:
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.
É, 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.
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.