2011-07-18 21 views
2

私は、検索可能なフィールド(名前、テキスト、製品コードなど)が複数ある製品があります。CakePHPの複数単語検索クエリから条件を検索する

私がしたいのは、検索文字列を爆発させ、すべての単語がレコードのどこかにあることを確認することです。

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

は今、私は検索文字列が単語を持っている限り多くのOR-配列を作るために持っているとAND-配列にそれらすべてが含まれていることを感じる:

一言で、私は通常のように行うだろう。私はちょうどそれをコード化する方法を知らない。このような

答えて

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

@Henri、私はあなたが最初に望んでいたことを理解していなかったと思います。私の更新を確認してください – kaklon

関連する問題