我是CakePHP的初学者。我想做一个简单的搜索框,但它不起作用,下面是我的控制器中的代码: -
public function index() {
if ($this->request->is('post')) {
$this->loadModel('Job');
$this->request->data = $keyword;
$result = $this->Job->find('all', array(
'condition'=>array('Job.title'=>'% $keyword %')
));
$this->set('rslt',$result);
//$this->set('kc',$keyword);
}
}
我认为,我的代码如下: -
<?php echo $this->Form->create('search', array('type'=>'get'));?>
<?php echo $this->Form->input('search');?>
<?php echo $this->Form->end('Submit');?>
<pre><?php print_r($rslt) ; ?></pre>
但搜索结果显示空白页。
答案 0 :(得分:1)
您的代码似乎存在一些问题。
首先,您应该从请求数据中获取关键字,例如 $this->request->data
。不要在示例代码中覆盖'Job.title LIKE' => '%' . $this->request->data['search']['keyword'] . '%'
;它是一个提交到页面的数据数组,你用字符串替换它!
其次,您的情况需要看起来像%
。在PHP变量周围使用单引号将其视为字符串,因此不会将其替换为变量的值。相反,我们只引用LIKE
s。
您还错过了条件索引中搜索的public function index() {
if (!empty($this->request->data)) {
$this->loadModel('Job');
$result = $this->Job->find('all', array(
'conditions' => array('Job.title LIKE' => '%' . $this->request->data['search']['keyword'] . '%')
));
$this->set('rslt',$result);
}
}
关键字。
控制器中的代码应如下所示: -
SELECT TO_Char(ordered_date,'DD-MON-YYYY') as ordered_date,
order_number, customer_name
FROM order_tbl
WHERE NVL(:P_ORDER_NUMBER, order_number) = order_number
AND ordered_date between NVL(TO_DATE(:P_FROM_DATE,'DD-MON-YYYY'),TO_DATE('01-MAR-1900','DD-MON-YYYY')) and NVL(to_date(:P_TO_DATE,'DD-MON-YYYY'),TO_DATE('31-DEC-2100','DD-MON-YYYY'))
AND NVL(:P_CUSTOMER_NAME, customer_name) = customer_name
答案 1 :(得分:0)
当您尝试在控制器中访问它时,您的表单方法设置为"GET"
而不是发布。
//您的观看代码
<?php echo $this->Form->create('search', array('type'=>'get'));?>
<?php echo $this->Form->input('search');?>
<?php echo $this->Form->end('Submit');?>
您应该在控制器中执行此操作。
if($this->request->is('get')){
$keyword = $this->request->data['search'];
// OR $keyword = $_GET['search'];
$this->Job->find('all', array('conditions' =>
'Job.colunmName LIKE' => '%'.$keyword.'%'
))
}
答案 2 :(得分:-1)
改变这个:
'% $keyword %'
到此:
'%$keyword%'
即删除空格,否则生成的SQL将尝试查找由空格包围的关键字。