6

ユーザーが Web サイト上のすべての製品を検索する方法を作成しようとしています。彼らが「バートン スノーボード」を検索すると、バートン ブランドのスノーボードだけが結果に表示されます。ただし、「burton」のみを検索すると、burton ブランドのすべての製品が表示されます。

これは私が書き込もうとしたものですが、複数の理由で機能していません。

コントローラ:

 public function search(){
    $input = Input::all();

    $v= Validator::make($input, Product::$rules);

    if($v->passes())
    {

        $searchTerms = explode(' ', $input);
        $searchTermBits = array();
        foreach ($searchTerms as $term) {
            $term = trim($term);
            if (!empty($term)){
                $searchTermBits[] = "search LIKE '%$term%'";
            }
        }
        $result = DB::table('products')
        ->select('*')
        ->whereRaw(". implode(' AND ', $searchTermBits) . ")
        ->get();

        return View::make('layouts/search', compact('result')); 
    }
    return Redirect::route('/');    
}

このstackoverflow.comの問題に対して与えられた最初の解決策を再作成しようとしています

私が特定した最初の問題は、を分解しようとしているということです$inputが、それはすでに配列です。だから私はそれを修正する方法がわかりません。そして、私が書いた方法は->whereRaw(". implode(' AND ', $searchTermBits) . ")、確かに正しくありません。これらの問題を解決する方法はわかりませんが、洞察や解決策があれば大歓迎です。

4

4 に答える 4

1

これは、多くの検索語でEloquentを使用しようとしたときのサンプルです

public function search() {

    $q = Input::get('myInputField');

    $searchTerms = explode(' ', $q);

    $query = $article->where('title', 'LIKE', "%{$keyword}%")
             ->orWhere('description', 'LIKE', "%{$keyword}%");

    foreach($searchTerms as $term)
    {
        $query = $query->orWhere('name', 'LIKE', '%'. $term .'%');
    }

    $results = $query->get();

}

->get()関数を のような他の結果に変更することもできます->paginate()$results = $query->paginate(10);

于 2014-03-02T22:05:52.840 に答える