Search 在CakePHP中形成多词搜索查询的查找条件

Search 在CakePHP中形成多词搜索查询的查找条件,search,cakephp,Search,Cakephp,我有多个可以搜索的字段(名称、文本、产品代码等)的产品 我要做的是分解搜索字符串,确保在记录中的某个位置找到每个单词 有一句话我通常会说: 'OR'=>array( 'name LIKE'=>'%' . $oneword . '%', 'text LIKE'=>'%' . $oneword . '%', 'code LIKE'=>'%' . $oneword . '%', ) 现在我觉得我必须制作尽可能多的或数组作为搜索字符串的单词,并将它们全

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

我要做的是分解搜索字符串,确保在记录中的某个位置找到每个单词

有一句话我通常会说:

'OR'=>array(
    'name LIKE'=>'%' . $oneword . '%',
    'text LIKE'=>'%' . $oneword . '%',
    'code LIKE'=>'%' . $oneword . '%',
 )

现在我觉得我必须制作尽可能多的或数组作为搜索字符串的单词,并将它们全部包含在和数组中。我只是不知道如何编码。

像这样的东西应该可以

$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)));
编辑:如果所有搜索词必须出现在任何字段中,则如下所示:

$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); 

但据我所知,这段代码并不要求所有搜索词都出现在记录中……explode()应该为您指明正确的方向。我想答案已经很明显了。@Henri,我想我一开始不明白你想要什么。检查我的更新答案是obvius,但它不能满足我的要求。现在,任何搜索词都会返回一条记录。但我不希望他们都出现在任何一个领域。很抱歉我说得不够清楚。@Henri,也许你说得很清楚,但我不明白。我的代码所做的是:(term1必须在field1或field2或fieldN中)和(term2必须在field1或field2或fieldN中)和(termN必须在field1或field2或fieldN中)。如果任何字段中都不存在一个搜索项,则查询返回0。那不是你想要的吗?