Một phương pháp sẽ là sử dụng lệnh gọi MySQL REGEXP trong Biểu thức vị từ.
Nơi $select
là một bản sao của Zend\Db\Sql\Select
và $searchFor
là cụm từ tìm kiếm của bạn:
Tìm kiếm chuỗi con ban đầu có thể sử dụng nơi như thế này ...
$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
),
));
... và phiên bản toàn từ của phần trên là:
$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
),
));
Lưu ý rằng đây là những tìm kiếm đa trường, vì vậy tôi đã thực hiện PredicateSet::COMBINED_BY_OR
. Tôi đã mất quá nhiều thời gian để ngừng đánh lừa với \b
trong regex của tôi. Hy vọng điều này sẽ cứu ai đó ngoài kia một chút thời gian.