我正在尝试对应用程序进行简单搜索,但不确定处理此问题的最佳方法。我的数据库包含一个包含城市字段的列表对象。我想创建一个搜索表单,用户将城市输入到文本字段中,并在下一页上获取该城市的所有列表。我不想执行全文搜索,只是对该城市字段的查询。
此外,在结果页面上,我想将查询存储在POST中,但无法找到最佳方法。
在控制器中处理此问题的最佳方法是什么?
答案 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'));
?>