2

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

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. Пожалуйста помоги.

+0

Я не думаю, что эта функциональность поддерживается плагином поиска. Вероятно, вам лучше было бы создать собственную фильтрацию. –

+0

@DavidYell Да, это не так, я думаю. может быть, нам нужно будет настроить его, чтобы использовать его так, как мы этого хотим, или вы можете предложить какой-либо метод, чтобы я мог его реализовать ..? –

+0

Лично я бы, скорее всего, пропустил данные запроса и построил массив, который я мог бы передать в состояние «IN» в моем запросе. –

ответ

0

Это должно работать нормально, если вы передаете аргумент arg 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

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