Eine Methode wäre die Verwendung eines MySQL REGEXP-Aufrufs in einem Prädikatsausdruck.
Wobei $select
ist eine Instanz von Zend\Db\Sql\Select
und $searchFor
ist Ihr Suchbegriff:
Die ursprüngliche Substring-Suche könnte ein where wie dieses verwenden...
$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
),
));
... und die Ganzwortversion des Obigen ist:
$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
),
));
Beachten Sie, dass dies Mehrfeldsuchen sind, also habe ich ein PredicateSet::COMBINED_BY_OR
durchgeführt . Ich habe viel zu lange gebraucht, um mit \b
aufzuhören in meiner Regex. Ich hoffe, das spart jemandem da draußen etwas Zeit.