Формирование условий поиска из многословного поискового запроса в CakePHP - PullRequest
2 голосов
/ 18 июля 2011

У меня есть продукты с несколькими полями, которые можно искать (имя, текст, код продукта и т. Д.).

Я хочу разобрать строку поиска и убедиться, что каждое слово находится где-то в записи.

С одним словом я обычно делал бы следующее:

'OR'=>array(
    'name LIKE'=>'%' . $oneword . '%',
    'text LIKE'=>'%' . $oneword . '%',
    'code LIKE'=>'%' . $oneword . '%',
 )

Теперь я чувствую, что мне нужно создать столько OR-массивов, сколько в строке поиска есть слова, и включить их все в массив AND. Я просто не знаю, как это кодировать.

1 Ответ

6 голосов
/ 18 июля 2011

Что-то вроде этого должно сделать

$conditions = array();
$search_terms = explode(' ', $search_string);
foreach($search_terms as $search_term){
    $conditions[] = array('Model.name Like' =>'%'.$search_term.'%');
    $conditions[] = array('Model.text Like' =>'%'.$search_term.'%');
    $conditions[] = array('Model.code Like' =>'%'.$search_term.'%');
}
$products = $this->paginate('Product', array('conditions' => array('OR' => $conditions)));

Изменить: Если все ваши поисковые термины должны присутствовать в любом из полей, это будет что-то вроде этого:

$conditions = array();
$search_terms = explode(' ', $search_string);
foreach($search_terms as $search_term){
    $conditions[] = array('OR' => array('Model.name Like' =>'%'.$search_term.'%',
                                        'Model.text Like' =>'%'.$search_term.'%',
                                        'Model.code Like' =>'%'.$search_term.'%',
                                  )
                          );
}
$products = $this->paginate('Product', $conditions); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...