2014-12-30 3 views

ответ

1

Одним из способов было бы использовать вызов MySQL REGEXP в выражении Predicate.

Где $select является экземпляром Zend\Db\Sql\Select и $searchFor Ваш поисковый запрос:

оригинальный поиск подстроки может использовать Where, как это ...

$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 в моем регулярном выражении. Надеюсь, что это кое-что спасло.

Смежные вопросы