Filtro em CRUD - case sensitive/insensitive

Não deixe de perguntar, solucione aqui suas dúvidas...

Filtro em CRUD - case sensitive/insensitive

Mensagempor jtakata » Qui Jul 14, 2011 1:54 pm

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
jtakata
 
Mensagens: 350
Data de registro: Seg Abr 26, 2010 11:04 pm

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor rogelgarcia » Qui Jul 14, 2011 7:07 pm

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.
rogelgarcia
Administrador
 
Mensagens: 674
Data de registro: Qua Jul 08, 2009 9:02 am

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor jtakata » Qui Jul 14, 2011 9:50 pm

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.
jtakata
 
Mensagens: 350
Data de registro: Seg Abr 26, 2010 11:04 pm

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor jtakata » Qui Jul 14, 2011 10:13 pm

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().
jtakata
 
Mensagens: 350
Data de registro: Seg Abr 26, 2010 11:04 pm

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor rogelgarcia » Sex Jul 15, 2011 2:45 am

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())
rogelgarcia
Administrador
 
Mensagens: 674
Data de registro: Qua Jul 08, 2009 9:02 am

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor jtakata » Sex Jul 15, 2011 9:48 am

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
jtakata
 
Mensagens: 350
Data de registro: Seg Abr 26, 2010 11:04 pm

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor rogelgarcia » Sex Jul 15, 2011 9:00 pm

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.
rogelgarcia
Administrador
 
Mensagens: 674
Data de registro: Qua Jul 08, 2009 9:02 am

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor jtakata » Sex Jul 15, 2011 10:21 pm

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

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor rogelgarcia » Sex Jul 15, 2011 11:03 pm

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
rogelgarcia
Administrador
 
Mensagens: 674
Data de registro: Qua Jul 08, 2009 9:02 am

Re: Filtro em CRUD - case sensitive/insensitive

Mensagempor jtakata » Dom Jul 17, 2011 3:35 am

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?
jtakata
 
Mensagens: 350
Data de registro: Seg Abr 26, 2010 11:04 pm

Próximo

Retornar para Dúvidas

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 visitantes

cron