2016-02-05 123 views
0

我试图在我的CakePHP应用程序中构建一个基本的搜索功能。只有两个字段需要被搜索。我有一些代码在我的控制器从形式拿两个搜索值:CakePHP:多个条件上的过滤器视图只返回一个结果

$options = array('Model.id' => $this->request->data['Model']['id'], 
    'Model.field2' => $this->request->data['Model']['field2']); 

$this->set('views', $this->Paginator->paginate('Model', $options)); 

这些投入都来自下拉列表和两者都需要。现在,当我运行我的搜索,只返回一个结果,在域2下拉第一可选选项,就像这样:

ID Field2 
1 Value1 

OR 

ID Field2 
2 Value1 

如果我搜索在FIELD2任何其他值,我没有得到任何结果。如果我将field2的下拉列表注释掉并且只搜索ID,那么我将得到具有该ID的所有行(约500,这是预期的)。为什么当我在第二个下拉列表中搜索ID和Value1以外的任何值时,我的结果为空?

+0

要传递一个'WHERE和'查询,'其中model.id =请求[模型] [ID]和model.field2 =请求[模型] [FIELD2 ]“这是你想要的吗? –

+0

正确。该ID附加到500个记录,但每个记录都属于一个对应的field2值。两者都以两个表中存在的序列号(1-500)为键。 – Chris

+0

我相信你的'$ options'数组需要是'''''外部数组中的一个元素。 http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html#query-setup –

回答

1

$options阵列作为参数传递给paginate可以包含多个键,类似于由Model->find()使用的那些传递

首先构建$conditions阵列

$conditions = array('Model.id' => $this->request->data['Model']['id'], 
    'Model.field2' => $this->request->data['Model']['field2']); 

然后$options

$options['conditions'] = $conditions 

然后传递给paginate

$this->set('views', $this->Paginator->paginate('Model', $options)); 


更新:

$conditions = array('Model.id' => $this->request->data['Model']['id'], 
     'Model.field2' => $this->request->data['Model']['field2']); 
$options['conditions'] = $conditions; 

$this->Paginator->settings = $options; 
$data = $this->Paginator->paginate('Model'); 

$this->set('views', $data); 
+0

嗯。当我尝试这样做时,出现以下SQL错误:“列未找到:1054未知列'条件'在'where子句'”中。 – Chris

+0

正确,我弄糊涂了一下,试试更新后的代码。尽管从我在文档中看到的方法也应该起作用。 –

+0

谢谢。不再收到SQL错误,但我回到只有我的查询的第一行返回。如果您需要查看我的模型或查看代码,请告诉我,我会更新原始帖子。 – Chris