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


Searching Multiple Keywords with foreach in Cakephp

这是我的代码:

$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_array为空时)可能未定义的值$search您也可能会出现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%"]
        ]
    ]
]