我的产品有多个字段,可以搜索(名称,文字,产品代码等).
我想要做的是爆炸搜索字符串,并确保在记录的某处找到每个单词.
用一句我通常会喜欢:
'OR'=>array(
'name LIKE'=>'%' . $oneword . '%',
'text LIKE'=>'%' . $oneword . '%',
'code LIKE'=>'%' . $oneword . '%',
)
Run Code Online (Sandbox Code Playgroud)
现在我觉得我必须制作与搜索字符串一样多的OR数组,并将它们全部包含在AND-array中.我只是不知道如何编码.
这样的事情应该做到这一点
$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)