2

我正在尝试使用 CakeDC 的 Search plugin实现搜索。在此搜索中,我有一个已'multiple' => 'checkbox'设置的字段。此字段允许用户选择多个城市,以便他们可以根据城市/城市过滤结果。我为此做了什么,我只是在 's'type' => 'IN'中为该字段指定了Searchable Model's $filterArgs。但注意到发生它只是响应所有结果,没有发生搜索/过滤。为了清楚地了解我在这里实现的是代码片段:

模型.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');   

模型控制器.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()inModelsController来内爆要使用的 withcity array()但所有结果都相同。我想问是否有任何其他插件可以做到这一点,或者是否有任何黑客可以使用 cakeDC 的搜索插件来做到这一点。请帮忙。(,)IN

4

1 回答 1

0

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

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

你应该能够传入city:houston|dallas|austinURL

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

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

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

使用 DebugKit 并监视您的 SQL……您可以debug()在过程的任何步骤中,您应该获得这些值。

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

(我大量使用它,我喜欢它让我组织所有搜索过滤器的方式)

于 2015-02-25T18:41:22.083 回答