Плагин CakePHP Search ищет во многих полях

Я использую поисковый плагин CakePHP http://cakedc.com/downloads/view/cakephp_search_plugin и хочу сделать аргумент для поиска нескольких полей. У меня есть массив filterArgs следующим образом

var $filterArgs = array(
      array('name' => 'search', 'type' => 'like', 'field' => 'Interview.title_en'),
    );

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

var $filterArgs = array(
      array('name' => 'search', 'type' => 'like', 'field' => array('Interview.title_en',  'Interview.Desc'));

но это не работает!!

Какие-либо предложения?


person Ahmed Elmorsy    schedule 26.07.2011    source источник
comment
Мне удалось решить эту проблему, отправив 2 параметра в URL /interviews/title:{searchedvalue}/desc:{searchedvalue} и в контроллере $this-›paginate['conditions'] = array( or =› $this- ›Post-›parseCriteria($this-›passedArgs) ); Это сработало хорошо   -  person Ahmed Elmorsy    schedule 26.07.2011


Ответы (1)


Чтобы добиться этого, вы должны создать в своей модели простой метод, который строит условия «ИЛИ» для поиска полей.

public $filterArgs = array(
    array('name' => 'q', 'type' => 'query', 'method' => 'filterQuery'),
);

public function filterQuery($data = array()) {
    if(empty($data['q'])) { // q is the name of my search field
        return array();
    }

    $query = '%'.$data['q'].'%';
    return array(
        'OR' => array(
            'Model.title LIKE' => $query,
            'Model.description LIKE' => $query,
            'Model.resources LIKE' => $query,
        )
    );
}
person Dunhamzzz    schedule 26.07.2011
comment
Мне удалось решить эту проблему, отправив 2 параметра в URL /interviews/title:{searchedvalue}/desc:{searchedvalue} и в контроллере $this-›paginate['conditions'] = array( or =› $this- ›Post-›parseCriteria($this-›passedArgs) ); Он работал хорошо без добавления других методов - person Ahmed Elmorsy; 26.07.2011
comment
Я бы сказал, что это не сложно и хорошо работает без каких-либо дополнительных методов. Дополнительный метод будет идеальным способом с более сложным запросом, но я просто хотел добавить ИЛИ между условиями вместо И между ними. - person Ahmed Elmorsy; 28.07.2011