Jedną z metod byłoby użycie wywołania MySQL REGEXP w wyrażeniu predykatu.
Gdzie $select
jest instancją Zend\Db\Sql\Select
i $searchFor
to wyszukiwane hasło:
Oryginalne wyszukiwanie podciągów może używać miejsca takiego jak to...
$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
),
));
...a wersja całego słowa powyższego to:
$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
),
));
Zauważ, że są to wyszukiwania wielopolowe, więc wykonałem PredicateSet::COMBINED_BY_OR
. Zajęło mi zbyt dużo czasu, aby przestać wygłupiać się z \b
w moim wyrażeniu regularnym. Mam nadzieję, że to oszczędzi komuś trochę czasu.