Использование поискового плагина CakeDC для поиска данных в поле множественного выбора

Я пытаюсь реализовать поиск с помощью поискового плагина CakeDC. В этом поиске у меня есть поле, которое имеет 'multiple' => 'checkbox' установлено. Это поле позволяет пользователю выбрать несколько городов, чтобы они могли фильтровать результаты по городам / городам. Что я сделал в пользу этого, я просто указал 'type' => 'IN' для этого поля в SearchableModel"s $filterArgs, Но, отметив, что это произошло, он просто ответил всем результатом, поиска и фильтрации не произошло. Чтобы получить четкое представление о том, что я реализовал, здесь приведены фрагменты кода:

Model.php

   public $actsAs = array(
            'Search.Searchable'
        );
   public $filterArgs = array(
                    'city' => array(
                        'type' => 'in',
                        'field' => 'Model.city'
                    ));

search_form.ctp

echo $this->Form->create('Model', array('url' => array('controller' => 'models', 'action' => 'search')));
echo $this->Form->input('city', array(
    'multiple' => 'checkbox',
    'options' => array(
        'city1' => 'city1',
        'city2' => 'city2',
        'cityn' => 'cityn')
));
echo $this->Form->end('search');   

ModelsController.php

public function search() {
        $this->layout = 'front_common';
        $this->Prg->commonProcess();
        $this->Paginator->settings = array(
            'conditions' => $this->Model->parseCriteria($this->Prg->parsedParams()),
            'limit' => 10
        );
        $this->set('Data', $this->Paginator->paginate());
}

Также однажды я попытался использовать beforeFilter() в ModelsController взорвать cityarray() с (,) использоваться с IN но это же все результаты. Я хочу спросить, есть ли какой-либо другой плагин, чтобы сделать это или любой взлом, чтобы сделать это с поисковым плагином cakeDC. Пожалуйста помоги.

1 ответ

Это должно работать нормально, если вы передаете в аргумент parseCriteria() как простой массив значений.

public $filterArgs = array(
    array(
        'name' => 'city',
        'type' => 'value',
        'field' => 'Model.city'
    )
);

И вы должны быть в состоянии пройти city:houston|dallas|austin в URL

Следует разобрать это в массив args => [city => [houston, dallas, austin]]

А также parseCriteria() переведем это в следующий фрагмент условия: [Model.city => [houston, dallas, austin]]

И CakePHP изначально переводит это в SQL, где фрагмент: IN(houston, dallas, austin)

Используйте DebugKit и следите за своим SQL... вы можете debug() на любом этапе процесса вы должны получить эти значения.

Вот полные документы по плагину поиска: https://github.com/CakeDC/search/tree/master/Docs/Documentation

(Я активно использую его, и мне нравится, как он позволяет мне организовывать все поисковые фильтры)

Другие вопросы по тегам