ZF2 - 用于全字搜索的MySQL Regex

时间:2014-12-30 16:31:10

标签: php mysql regex zend-framework2

鉴于:您在ZF2模型中有一个正常运行的子字符串搜索。你怎么把它变成一个全字搜索?

1 个答案:

答案 0 :(得分:1)

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

其中$selectZend\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。希望这能节省一些人的时间。