Betrachten Sie diese drei "Heuhaufen" -Strings:
ein) foo bar
b) welcome to foo bar industries
c) foo barer
Und jetzt meine "Nadel":
foo bar
(Heh)
Ich möchte, dass mein Filter meine Nadel mit den Heuhaufen-Saiten a & b, aber nicht mit c in Übereinstimmung bringt. Ich habe versucht:
$collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%'));
Aber das obige stimmt mit c überein.
Ich habe auch versucht:
$collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces
Das Obige passt nur zu b.
Jede Hilfe wird sehr geschätzt.
attributes
collection
collection-filtering
beingalex
quelle
quelle
addAttributeToFilter
sollte durch ersetzt werdenaddFieldToFilter
.Eine mögliche Lösung besteht darin,
REGEXP
anstelle vonLIKE
:Aus der MySQL-Dokumentation :
Beachten Sie, dass Sie
$needle
Zeichen, die in regulären POSIX-Ausdrücken besondere Bedeutungen haben können, maskieren müssen. Siehe auch: /programming/4024188/php-function-to-escape-mysql-regexp-syntaxquelle
Die akzeptierte Antwort funktioniert nicht richtig. Es prüft nur Leerzeichen vor und nach dem Text.
Angenommen, Sie haben folgende Liste
Wenn Sie nun versuchen, mit Jacke unter Verwendung der akzeptierten Antwort zu suchen , werden nur Sommerjacke und Winterjacke zurückgegeben
Ich denke, folgende Lösung ist besser
quelle
['eq' => $needle]
hinzugefügt werden, um genaue Übereinstimmungen zu finden (oder besser, verwenden Sie die Regex-Lösung, die alle Grenzen findet, nicht nur Leerzeichen)