Considere estas tres cadenas de "pajar":
un) foo bar
si) welcome to foo bar industries
C) foo barer
Y ahora mi "aguja":
foo bar
(Je)
Me gustaría que mi filtro haga coincidir mi aguja con las cadenas de pajar a & b pero no c. Yo he tratado:
$collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%'));
Pero lo anterior coincide con c.
También probé:
$collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces
Lo anterior solo coincide con b.
Cualquier ayuda es muy apreciada.
attributes
collection
collection-filtering
siendoalex
fuente
fuente
addAttributeToFilter
deben reemplazar conaddFieldToFilter
.Una posible solución es usar en
REGEXP
lugar deLIKE
:De la documentación de MySQL :
Tenga en cuenta que si
$needle
puede contener caracteres que tienen significados especiales en las expresiones regulares POSIX, debe escapar de ellos. Ver también: /programming/4024188/php-function-to-escape-mysql-regexp-syntaxfuente
La respuesta aceptada no funciona correctamente. Está comprobando solo el espacio antes y después del texto.
Supongamos que tienes la siguiente lista
Ahora, si intentas buscar con la chaqueta con la respuesta aceptada, solo se mostrarán Summer Jacket y Winter Jacket
Creo que la siguiente solución es mejor
fuente
['eq' => $needle]
podría agregar una cuarta condición para encontrar coincidencias exactas (o mejor, usar la solución regex que encuentra todos los límites, no solo los espacios)