ZF2 - MySQL的正则表达式为全字搜索(ZF2 - MySQL Regex for Who

2019-10-21 12:24发布

鉴于:你在ZF2模型运作的子搜索。 你是怎么做到把它转换成一个整词搜索?

Answer 1:

一种方法是在谓词表达式中使用MySQL的REGEXP电话。

其中$select是一个实例Zend\Db\Sql\Select$searchFor是你的搜索词:

原来的字符串搜索可能会使用这样的地方...

$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
    ),
));

......与上述全字的版本是:

$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
    ),
));

注意,这些多领域的搜索,所以我已经做了PredicateSet::COMBINED_BY_OR 。 我花了太长时间停止与鬼混\b在我的正则表达式。 希望这可以节省有人在那里一段时间。



文章来源: ZF2 - MySQL Regex for Whole word searches