在CakePHP中从多字搜索查询中形成查找条件

Hen*_*nri 2 search cakephp

我的产品有多个字段,可以搜索(名称,文字,产品代码等).

我想要做的是爆炸搜索字符串,并确保在记录的某处找到每个单词.

用一句我通常会喜欢:

'OR'=>array(
    'name LIKE'=>'%' . $oneword . '%',
    'text LIKE'=>'%' . $oneword . '%',
    'code LIKE'=>'%' . $oneword . '%',
 )
Run Code Online (Sandbox Code Playgroud)

现在我觉得我必须制作与搜索字符串一样多的OR数组,并将它们全部包含在AND-array中.我只是不知道如何编码.

kak*_*lon 6

这样的事情应该做到这一点

$conditions = array();
$search_terms = explode(' ', $search_string);
foreach($search_terms as $search_term){
    $conditions[] = array('Model.name Like' =>'%'.$search_term.'%');
    $conditions[] = array('Model.text Like' =>'%'.$search_term.'%');
    $conditions[] = array('Model.code Like' =>'%'.$search_term.'%');
}
$products = $this->paginate('Product', array('conditions' => array('OR' => $conditions)));
Run Code Online (Sandbox Code Playgroud)

编辑:如果您的所有搜索字词必须出现在任何字段中,它将是这样的:

$conditions = array();
$search_terms = explode(' ', $search_string);
foreach($search_terms as $search_term){
    $conditions[] = array('OR' => array('Model.name Like' =>'%'.$search_term.'%',
                                        'Model.text Like' =>'%'.$search_term.'%',
                                        'Model.code Like' =>'%'.$search_term.'%',
                                  )
                          );
}
$products = $this->paginate('Product', $conditions); 
Run Code Online (Sandbox Code Playgroud)