这是我的代码:
$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);
}
此方法仅返回最后一个关键字。例如,如果有人搜索“移动应用”,则此方法仅搜索“应用”。如何解决这个问题?
您仅使用最后的搜索结果。您可以在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%"]
]
]
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句