2011-07-18 20 views
2

我的產品具有多個可以搜索的字段(名稱,文本,產品代碼等)。在CakePHP中通過多詞搜索查詢形成查找條件

我想要做的是爆炸搜索字符串,並確保在記錄的某處找到每個單詞。

用一個字,我通常會做這樣的:

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

現在我覺得我必須讓儘可能多的OR陣列作爲搜索字符串有句話,包括他們都在和陣列。我只是不知道如何編碼。

回答

5

像這樣的事情應該去做

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

但這個代碼韓元根據我的理解,不要求所有搜索條件都存在...... – Henri

+0

explode()應該指向您正確的方向。我想答案已經很明顯了。 –

+0

@亨利,我想我起初不明白你想要什麼。檢查我的更新 – kaklon