Jednou z metod by bylo použití volání MySQL REGEXP v predikátovém výrazu.
Kde $select
je instancí Zend\Db\Sql\Select
a $searchFor
je váš hledaný výraz:
Původní hledání podřetězců může používat kde jako je toto...
$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 celá verze výše uvedeného je:
$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
),
));
Všimněte si, že se jedná o vyhledávání ve více polích, takže jsem provedl PredicateSet::COMBINED_BY_OR
. Trvalo mi příliš dlouho, než jsem přestal dovádět s \b
v mém regulárním výrazu. Doufám, že to někomu ušetří čas.