我正在尝试使用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的搜索插件执行此操作。请帮忙。
答案 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)
使用DebugKit并监控您的SQL ...您可以在此过程的任何步骤debug()
获取这些值。
以下是搜索插件的完整文档: https://github.com/CakeDC/search/tree/master/Docs/Documentation
(我大量使用它,我喜欢它如何让我整理所有搜索过滤器)