具有多个字段的Cakephp搜索选项

时间:2011-01-03 12:16:12

标签: mysql cakephp

在我的项目中,我实现了搜索选项。我们的用户应该具备基于“Zip,Street,City and State”四个字段进行搜索的能力。但这些字段都不是强制性的。

我很困惑我应该在find()中放置什么条件。 所以请帮助我。

3 个答案:

答案 0 :(得分:2)

我假设你遇到了麻烦,因为表单字段是可选的,而且您不确定如何为您的查找构建conditions。这是一个简单的方法:

$conditions = array();
if (!empty($this->data['User']['zip'])) {
    $conditions[] = array('User.zip' => $this->data['User']['zip']);
}
if (!empty($this->data['User']['street'])) {
    $conditions[] = array("User.street LIKE '%{$this->data['User']['street']}%'");
}
... etc

最后,您可以严格

附加条件
$this->User->find('all', array('conditions' => $conditions));

或者,松散地

$this->User->find('all', array('conditions' => array('or' => $conditions)));

第二种形式将OR操作数放在WHERE条件之间,以便返回任何特定匹配。从这里开始,慢慢增加搜索的复杂性。

答案 1 :(得分:1)

您必须更具体地解决问题所在。如果它只是提出条件,那么基本上尝试这样的事情:

<?php
$results = $this->Model->find('all', array(
  'conditions' => array(
    'Model.field' => '%'.$this->data['Model']['some_search_field'].'%',
    'Model.field2' => '%'.$this->data['Model']['some_search_field2'].'%')
  ));
?>

答案 2 :(得分:0)

这是在CakePHP或任何Web应用程序中处理搜索的正确方法: http://bakery.cakephp.org/articles/calin/2008/09/18/search-feature-to-cakephp-blog-example

它涉及创建搜索索引,这实际上意味着它将表中每个记录的所有字段都滚动到一个字符串中,这使搜索更容易。按照上述教程优化您网站的搜索。