Rozważ te trzy ciągi „stogu siana”:
za) foo bar
b) welcome to foo bar industries
do) foo barer
A teraz moja „igła”:
foo bar
(Heh)
Chciałbym, aby mój filtr pasował do mojej igły z ciągami stogu siana a & b, ale nie c. Próbowałem:
$collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%'));
Ale powyższe pasuje do c.
Próbowałem także:
$collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces
Powyższe pasuje tylko do b.
Każda pomoc jest mile widziana.
attributes
collection
collection-filtering
beingalex
źródło
źródło
addAttributeToFilter
powinny zostać zastąpione przezaddFieldToFilter
.Możliwym rozwiązaniem jest użycie
REGEXP
zamiastLIKE
:Z dokumentacji MySQL :
Zauważ, że jeśli
$needle
mogą zawierać znaki, które mają specjalne znaczenie w wyrażeniach regularnych POSIX, musisz je uciec. Zobacz także: /programming/4024188/php-function-to-escape-mysql-regexp-syntaxźródło
Akceptowana odpowiedź nie działa poprawnie. Sprawdza tylko miejsce przed i po tekście.
Załóżmy, że masz następującą listę
Teraz, jeśli spróbujesz wyszukać kurtkę przy użyciu zaakceptowanej odpowiedzi, zwróci tylko letnią kurtkę i zimową kurtkę
Myślę, że następujące rozwiązanie jest lepsze
źródło
['eq' => $needle]
aby znaleźć dokładne dopasowania (lub lepiej, użyj rozwiązania wyrażenia regularnego, które znajduje wszystkie granice, nie tylko spacje)