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

苏莱曼杜兹根

这是我的代码:

$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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章