我在我的应用中使用了cakeDC的搜索插件。如果我在用户名字段中没有传递任何值,我可以找出结果为空的原因我在搜索但是将帐户类型过滤器设置为admin或者用户对于记录,请设置过滤器使用用户名字段为空的所有用户将输出系统中的所有用户,尝试将帐户类型过滤器设置为all的搜索行为复制为具有空用户名搜索字段,以便将帐户类型过滤器设置为2用户类型
如果需要,请提供相关代码:
控制器
public $components = array('Paginator', 'Session','Search.Prg');
public $presetVars = array(
array('field' => 'username', 'type' => 'value'),
array('field' => 'account_type', 'type' => 'value'));
public function admin_index() {
$this->Prg->commonProcess();
$this->paginate = array(
'conditions' => $this->User->parseCriteria($this->passedArgs));
$this->set('users', $this->Paginator->paginate(),'session',$this->Session);
模型
public $actsAs = array('Search.Searchable');
public $filterArgs = array( array('name' => 'username', 'type' => 'query', 'method' => 'filterName'),
array('name' => 'account_type', 'type' => 'value'),
);
public function filterName($data, $field = null) {
$nameField = '%' . $data['username'] . '%';
return array(
'OR' => array(
$this->alias . '.username LIKE' => $nameField,
));
}
查看搜索表单
<div><?php echo $this->Form->create('User', array(
'novalidate' =>true,'url' => array_merge(array('action' => 'index','admin'=> true), $this->params['pass'])
)); ?>
<?php
$account_types = array(
'' => __('All', true),
0 => __('admin', true),
1 => __('user', true),);
echo $this->Form->input('username', array('div' => false, 'empty' => true)); // empty creates blank option.
echo $this->Form->input('account_type', array('label' => 'account_type', 'options' => $account_types));
echo $this->Form->submit(__('Search', true), array('div' => false));
echo $this->Form->end();
?></div>
答案 0 :(得分:0)
尝试将“空”&#39;用户名和account_type中的allowEmpty如下:
public $filterArgs = array( array('name' => 'username', 'type' => 'query', 'method' => 'filterName', 'empty'=>true, 'allowEmpty'=>true),
array('name' => 'account_type', 'type' => 'value','empty'=>true, 'allowEmpty'=>true),
);
我从CakeDC /搜索中也有这种行为,这两个配置救了我,希望它也会为你做。
使用DebugKit.Toolbar检查正在执行的查询是个好主意。