这是我的代码:
$this->Product->recursive = 0;
foreach ($search_array as $value){
$search = $this->Product->find('all', array (
'contain' => array('Picture' => array('limit' => 1),
'User',
'Category',
'Vote'
),
'conditions' =>array("OR" =>
array("Product.name LIKE" => "%".$value."%",
"Product.description LIKE" => "%".$value."%")
)
));
}
$this->set('search', $search);
}
此方法仅返回最后一个关键字。例如,如果有人搜索“移动应用”,则此方法仅搜索“app”。 怎么能解决这个问题呢?
答案 0 :(得分:0)
您只使用上次搜索结果。您在foreach
循环内执行搜索,但仅使用$search
的最后一个值。在这种情况下,由于使用$search
值,因此在某些情况下(例如,当$search_array
为空时)可能未定义,因此您也可能出现PHP错误。
您需要使用foreach
生成LIKE
条件,然后在查询中使用此条件。
$this->Product->recursive = 0;
$or_condition = array();
foreach ($search_array as $value){
$or_condition[] = array_merge($or_condition, array(
array("Product.name LIKE" => "%$value%"),
array("Product.description LIKE" => "%$value%")
));
}
$search = array();
if (!empty($or_condition)) {
$search = $this->Product->find('all', array (
'contain' => array(
'Picture' => array('limit' => 1),
'User',
'Category',
'Vote'
),
'conditions' => array("OR" => $or_condition)
));
}
$this->set('search', $search);
所以,当有人搜索“移动应用”时,你会遇到这样的情况:
[
'contain' => [
'Picture' => array('limit' => 1),
'User',
'Category',
'Vote'
],
'conditions' => [
"OR" => [
["Product.name LIKE" => "%mobile%"],
["Product.description LIKE" => "%mobile%"],
["Product.name LIKE" => "%app%"],
["Product.description LIKE" => "%app%"]
]
]
]