Een methode zou zijn om een MySQL REGEXP-aanroep in een predicaatexpressie te gebruiken.
Waar $select
is een instantie van Zend\Db\Sql\Select
en $searchFor
is uw zoekterm:
De oorspronkelijke zoekopdracht op subtekenreeksen kan een waar gebruiken zoals deze...
$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
),
));
...en de volledige woordversie van het bovenstaande is:
$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
),
));
Merk op dat dit zoekopdrachten in meerdere velden zijn, dus ik heb een PredicateSet::COMBINED_BY_OR
gedaan . Het kostte me veel te lang om te stoppen met rotzooien met \b
in mijn regex. Ik hoop dat dit iemand tijd bespaart.