Considere estas três seqüências de "palheiro":
a) foo bar
b) welcome to foo bar industries
c) foo barer
E agora minha "agulha":
foo bar
(Heh)
Gostaria que meu filtro correspondesse à minha agulha com as cordas do palheiro a & b, mas não c. Eu tentei:
$collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%'));
Mas o acima corresponde a c.
Eu também tentei:
$collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces
O acima corresponde apenas a b.
Qualquer ajuda é muito apreciada.
attributes
collection
collection-filtering
beingalex
fonte
fonte
addAttributeToFilter
devem ser substituídos poraddFieldToFilter
.Uma solução possível é usar em
REGEXP
vez deLIKE
:Na documentação do MySQL :
Observe que se
$needle
puder conter caracteres que tenham significados especiais nas expressões regulares do POSIX, será necessário escapá-los. Consulte também: /programming/4024188/php-function-to-escape-mysql-regexp-syntaxfonte
A resposta aceita não funciona corretamente. Está verificando apenas o espaço antes e depois do texto.
Suponha que você tenha a seguinte lista
Agora, se você tentar pesquisar com jaqueta usando a resposta aceita, ele retornará apenas jaqueta de verão e jaqueta de inverno
Eu acho que a seguinte solução é melhor
fonte
['eq' => $needle]
poderia ser adicionado para encontrar correspondências exatas (ou melhor, use a solução regex que encontra todos os limites, não só espaços)