2017-04-08 5 views
0

私は次の問題があります。 ユーザーが入力を開始すると即座にAJAX経由で即時結果を取得するインスタント検索を作成します。キーアップごとに6つのテーブル内で余分なデータベースクエリを実行するのではなく、すべてのデータベースレコードを熱心に読み込み、それらを私の視点で提供したかったのです。 そのようにすれば、コレクションアイテムに検索語が含まれているかどうかを検索し、結果として返すだけで済みます。 where()の方法でコレクションを絞り込むことができます。Laravel:検索用語でコレクションをフィルタリングする

$words = $words->where('lemma', 'mysearchterm'); return $words;

問題がある、私は完全一致を取得したいのですが、標準のSQL-クエリ(SELECT * FROM nouns WHERE lemma LIKE %$mysearchterm%)のようにワイルドカードを使用しないでください。

どうすればよいですか? 私は今、2時間の努力を続けています。 これは理にかなっていますか?または、ユーザーが入力を開始しても毎回DBに照会するだけでパフォーマンス上の利点はありませんか?これを行うより良い方法はありますか?

ありがとうございます!

+1

あなたはクエリに 'like'を使う方法を尋ねていますか? '$ 'のように' 'と書くと、' '、' '、'% 'のように$ mysearchterm。'% ');'?また、フルテキスト検索エンジンである[Laravel Scout](https://laravel.com/docs/5.4/scout)を見ることもできます。パターンマッチングは必要ありません。それはある点まで自由であるが、かなり妥当な[Algolia](https://www.algolia.com/)を使用する。 – Ohgodwhy

+1

私はここでオースティンです。おそらくあなたはスカウトを見たいでしょう。 Algoliaを使いたくない場合は、[TNT Search driver for Scout](https://github.com/teamtnt/laravel-scout-tntsearch-driver)と簡単にペアリングすることができます。 –

答えて

0

ご回答ありがとうございます。私は間違いなくスカウトを見ます。私はこのコードで私の問題を解決しました:

$result = $words->filter(function ($value, $key) { 

    if (strpos($value->lemma, $mysearchterm) !== false) { 
     return $value; 
    } 
}); 
関連する問題