在Cakephp中使用foreach搜索多个关键字

时间:2016-03-08 10:39:22

标签: php cakephp cakephp-2.0

这是我的代码:

$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”。 怎么能解决这个问题呢?

1 个答案:

答案 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%"]
        ]
    ]
]