使用CakeDC的搜索插件,使用多选字段搜索数据

时间:2014-11-20 14:39:19

标签: php cakephp cakephp-2.0 cakephp-2.5 cakephp-search-plugin

我正在尝试使用CakeDC的搜索plugin来实现搜索。在此搜索中,我有一个已设置'multiple' => 'checkbox'的字段。此字段允许用户选择多个城市,以便他们可以根据城市/城市过滤结果。我为此做了什么,我只是在'type' => 'IN' Searchable' s Model中为该字段指定了$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来破坏city array() (,)IN一起使用,同样的结果。我想询问是否有任何其他插件可以执行此操作或使用cakeDC的搜索插件执行此操作。请帮忙。

1 个答案:

答案 0 :(得分:0)

假设您将arg作为简单的值数组传递给parseCriteria(),这应该可以正常工作。

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

您应该可以在网址

中传递city:houston|dallas|austin

它应该将其解析为args => [city => [houston, dallas, austin]]

的数组

parseCriteria()会将其转换为以下条件片段:[Model.city => [houston, dallas, austin]]

CakePHP本身将其转换为片段:IN(houston, dallas, austin)

的SQL

使用DebugKit并监控您的SQL ...您可以在此过程的任何步骤debug()获取这些值。

以下是搜索插件的完整文档: https://github.com/CakeDC/search/tree/master/Docs/Documentation

(我大量使用它,我喜欢它如何让我整理所有搜索过滤器)