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。那不是你想要的吗?