使用CakePHP post方法搜索特定的数据库字段

时间:2011-03-02 16:13:39

标签: php search cakephp

我正在尝试对应用程序进行简单搜索,但不确定处理此问题的最佳方法。我的数据库包含一个包含城市字段的列表对象。我想创建一个搜索表单,用户将城市输入到文本字段中,并在下一页上获取该城市的所有列表。我不想执行全文搜索,只是对该城市字段的查询。

此外,在结果页面上,我想将查询存储在POST中,但无法找到最佳方法。

在控制器中处理此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

你的观点看起来像这样

$this->Form->Create('Listing', array('action'=>'search'));
$this->Form->input('city', array('default'=>$city));
$this->Form->end();

if (isset($listings)) {
//code to display listings
}

此视图将创建正确的表单。而你的控制器需要获得该值

function search() {
   $city = '';
   if (!empty($this->data)) {
      $city  = $this->data['Listing']['city'];
      $opts  = array(
          'conditions' => array('Listing.city' => $city)
      );
      $listings   = $this->Listing->find('all', $opts); 
      $this->set('listings', $listings);
   }
   $this->set('city', $city); // so the keyword is saved. Can also get it via $this->data
}

此代码应该让您了解如何执行此操作。

答案 1 :(得分:0)

这是一篇包含CakePHP search plugin教程的精彩教程。您也可以从github(带有MySQL转储)下载完整的工作代码。

答案 2 :(得分:0)

查看:

<?php echo $this->Form->create() 

echo $this->Form->input('search');

?>

<input name="data[Product][word]" />

控制器:

<?php 

    $result = $this->Product->find('all',array(
        'conditions'=>array(
            'OR'=>array(
                array('name LIKE'=>'%'.$word.'%'),
                array('description LIKE'=>'%'.$word.'%'))))); 


    $this->set(compact('result'));

?>