Un metodo potrebbe essere quello di utilizzare una chiamata MySQL REGEXP in un'espressione predicata.
Dove $select
è un'istanza di Zend\Db\Sql\Select
e $searchFor
è il tuo termine di ricerca:
La ricerca della sottostringa originale potrebbe utilizzare un dove come questo...
$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
),
));
...e la versione a parole intere di quanto sopra è:
$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
),
));
Nota che si tratta di ricerche multi-campo, quindi ho eseguito un PredicateSet::COMBINED_BY_OR
. Mi ci è voluto troppo tempo per smettere di scherzare con \b
nella mia espressione regolare. Spero che questo faccia risparmiare tempo a qualcuno là fuori.