Página 1 de 2

Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Qui Jul 14, 2011 1:54 pm
por jtakata
Rógel e demais membros.

Como faço para fazer com que os filtros de CRUD se tornem case insentive?
O melhor mesmo era o usuário poder escolher...

Grato,
Jorge

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Qui Jul 14, 2011 7:07 pm
por rogelgarcia
Passo 1:

Criar no seu banco de dados uma função que remove os acentos de um determinado campo.

Quando tiver essa função funcionando.. passamos para o passo 2 que é configurar o next com essa função.

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Qui Jul 14, 2011 9:50 pm
por jtakata
Ao invés de criar uma função não poderia usar o ucase() ou lcase()?
Pelo que li, as funções que fazem parte da especificação ANSI existem em todos os SGBD (ou pelo menos deveriam).
Pode não ficar perfeito mas já seria de bom tamanho, pelo menos para o momento.

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Qui Jul 14, 2011 10:13 pm
por jtakata
Acabei de descobrir que o postgreSQL (justo o que eu uso :( ), não tem a função ucase() nem lcase().
Nele as funções são upper() e lower().

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Sex Jul 15, 2011 2:45 am
por rogelgarcia
A minha proposta era para fazer a consulta se tornar case insensitive e também ignorar os acentos..

No caso se só tornar case insensitive.. é só usar no queryBuilder o método WhereLikeIgnoreAll

exemplo:

whereLikeIgnoreAll("nome", filtro.getNome())

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Sex Jul 15, 2011 9:48 am
por jtakata
Funcionou exceto quando tem acentuação.
Você tem razão quando fala em ignorar os acentos. Fica mais confortável para o usuário.
Por enquanto vou deixar assim.
Quando der ou na hora que realmente precisar, eu volto ao assunto
Muito obrigado e abraços,
Jorge

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Sex Jul 15, 2011 9:00 pm
por rogelgarcia
Para a questão do acento, será necessário criar uma função no seu banco de dados. E depois configurar o next. Depois de configurado, todos os whereLikeIgnoreAll passam a usar essa função. É bem simples.

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Sex Jul 15, 2011 10:21 pm
por jtakata
No Postgre tem uma função chamada translate().
A chamada seria translate(campo, 'ÁáÉéÍíÓóÚúÂâÊêÎîÔôÛûÀàÈèÌìÒòÙùÄäËëÏïÖöÜüÃãÕõÑñÇç', 'AaEeIiOoUuAaEeIiOoUuAaEeIiOoUuAaEeIiOoUuAaOoCc').
Seria isso ou precisa de algo mais?

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Sex Jul 15, 2011 11:03 pm
por rogelgarcia
Precisa de algo mais.. você terá que criar uma função, que só recebe 1 parametro.. e retorna 1 parametro

Essa funçao irá retirar os acentos do que for passado como parametro e retornar a nova string sem acentos

Re: Filtro em CRUD - case sensitive/insensitive

MensagemEnviado: Dom Jul 17, 2011 3:35 am
por jtakata
Parece que dá pra criar uma função usando o CREATE FUNCTION do postgre.
Pelo que entendi, seria só definir um nome, o parâmetro de entrada e de saída e colocar a função translate dentro dessa função.
Confere?