Considérez ces trois chaînes de "meule de foin":
une) foo bar
b) welcome to foo bar industries
c) foo barer
Et maintenant mon "aiguille":
foo bar
(Il h)
Je voudrais que mon filtre corresponde à mon aiguille avec des cordes de meule de foin a & b mais pas c. J'ai essayé:
$collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%'));
Mais ce qui précède correspond à c.
J'ai aussi essayé:
$collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces
Ce qui précède ne correspond qu'à b.
Toute aide est très appréciée.
attributes
collection
collection-filtering
beingalex
la source
la source
addAttributeToFilter
doivent être remplacés paraddFieldToFilter
.Une solution possible consiste à utiliser à la
REGEXP
place deLIKE
:De la documentation MySQL :
Notez que si
$needle
peut contenir des caractères ayant des significations spéciales dans les expressions régulières POSIX, vous devez les échapper. Voir aussi: /programming/4024188/php-function-to-escape-mysql-regexp-syntaxla source
La réponse acceptée ne fonctionne pas correctement. Il vérifie uniquement l'espace avant et après le texte.
Supposons que vous ayez la liste suivante
Maintenant, si vous essayez de rechercher avec une veste en utilisant la réponse acceptée, elle ne renverra que la veste d'été et la veste d'hiver
Je pense que la solution suivante est meilleure
la source
['eq' => $needle]
pourrait être ajoutée pour trouver des correspondances exactes (ou mieux, utiliser la solution d'expression régulière qui trouve toutes les frontières, pas seulement les espaces)