Olá galera,
Nesse post mostrarei um forma prática de se fazer consultas onde acentos são ignorados na busca. Como ultimamente estou trabalhando com Laravel, utilizarei um trecho de código dele para ilustrar. Todavia você pode fazer os ajustes para o framework de sua preferência.
Primeiro utilizaremos o recurso unaccent presente no PostgreSQL 9.1 para tratar os acentos das strings cadastradas no banco. O unaccent é um dicionário de pesquisas textuais que remove os acentos.
O segundo recurso é o transliterator_transliterate presente no PHP 5.4 e transforma uma string ou parte dela através de um ICU transliterator.
<?php $locais = Local::where(DB::raw('unaccent(nome)'), 'ILIKE', "%". transliterator_transliterate('Any-Latin; Latin-ASCII', Input::get('nome')) ."%"); ?>
No código acima, estou pesquisando em uma tabela de locais cujo nome foi passado em um formulário de busca fictício. Supondo que o usuário entrou com a string bá no formulário e na nossa tabela de locais tenhamos cadastrados os nomes: Cuiabá, Barra, Iguatemi, Park Shopping.
O código resultante seria como o abaixo.
SELECT * FROM locais WHERE unaccent(nome) ILIKE '%ba%'
E como resultado da nossa busca teríamos os nomes: Cuiabá, Barra.
OBS: Para que os códigos acima funcionem é necessário instalar o recurso no PostgreSQL e o pacote de internacionalização do PHP. Para o PHP 5.5.3 é necessário instalar o pacote php5-intl e para o PostgreSQL deve se executar CREATE EXTENSION IF NOT EXISTS unaccent
Não é realmente simples?! Um grande abraço e até a próxima.
Você poderia me indicar um link para baixar shapes da hidrografia do Estado de São Paulo?
ResponderExcluirOlá João,
ExcluirEu não tenho um link, mas tenho o shape da bacia hidrográfica do Estado de São Paulo. Terminei de fazer um upload dele para você no link https://onedrive.live.com/redir?resid=8C5EFFAC64E659AD!1847&authkey=!AIJbRLnBy41jLAQ&ithint=file%2czip (bacia_hidrografica_sp)
Um abraço