Un método sería utilizar una llamada REGEXP de MySQL en una expresión de predicado.
Donde $select
es una instancia de Zend\Db\Sql\Select
y $searchFor
es su término de búsqueda:
La búsqueda de subcadena original podría usar un lugar como este...
$select->where(array(
new Predicate\PredicateSet(
array(
new Zend\Db\Sql\Predicate\Like('tag', '%' . $searchFor . '%'),
new Zend\Db\Sql\Predicate\Like('title', '%' . $searchFor . '%'),
),
Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR
),
));
...y la versión de palabra completa de lo anterior es:
$select->where(array(
new Predicate\PredicateSet(
array(
new Zend\Db\Sql\Predicate\Expression("tag REGEXP '([[:<:]]" . $searchFor ."[[:>:]])'"),
new Zend\Db\Sql\Predicate\Expression("title REGEXP '([[:<:]]" . $searchFor ."[[:>:]])'"),
),
Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR
),
));
Tenga en cuenta que estas son búsquedas de varios campos, por lo que hice un PredicateSet::COMBINED_BY_OR
. Me tomó demasiado tiempo dejar de perder el tiempo con \b
en mi expresión regular. Espero que esto le ahorre tiempo a alguien.