注: Laravel 4 と互換性を持たせたい場合は、https://github.com/TomLingham/Laravel-Searchy/tree/1.0 を参照してください
"require": { "tom-lingham/searchy" : "2.*"}
インストールが完了したら、config/app.php のプロバイダーにサービスプロバイダーを登録する必要があります:
TomLingham\Searchy\SearchyServiceProvider::class
'Searchy' => TomLingham\Searchy\Facades\Searchy::class
$users = Searchy::users('name', 'email')->query('John Smith')->get();
$users = Searchy::search('users')->fields('name', 'email')->query('John Smith')->get();
上記のコードは、検索結果を含むオブジェクト配列を返します。データベース クエリ オブジェクト インスタンスを返したい場合は、get() メソッドの代わりに getQuery() を使用できます。たとえば、ユーザーの名前、電子メールを検索したい場合、ユーザー名は次のように呼び出すことができます:
$users = Searchy::search('users')->fields('name', 'email')->query('John Smith') ->getQuery()->having('relevance', '>', 20)->get();
$users = Searchy::users('name', 'email', 'username')->query('John Smith')->get();
場合によっては、カスケード フィールドを検索する必要がある場合があります。たとえば、first_name と last_name 全体を一度に返したい場合は、フィールドを 2 つのコロンで区切ることができます:
$users = Searchy::users(['name', 'email', 'username'])->query('John Smith')->get();
$users = Searchy::users('first_name::last_name')->query('John Smith')->get();
Searchy::users('name')->withTrashed()->query('Batman')->get();
設定ファイルを config ディレクトリに公開して、デフォルトの設定をオーバーライドできます:
$users = Searchy::users('first_name::last_name')->query('John Smith')->select('first_name')->get();// Or you can swap those around...$users = Searchy::users('first_name::last_name')->select('first_name')->query('John Smith')->get();
php artisan vendor:publish
5. 検索ドライバー
Searchy は、「ドライバー」を使用して複数条件フィールドの一致を処理します。指定されたグループ「」の「一致」。指定された条件に基づいて文字列を一致させるために使用されます。現在、Searchy は、Simple、Fuzzy、および Levenshtein (実験的) の 3 つのドライバーのみをサポートしています。
Searchy::driver('fuzzy')->users('name')->query('Batman')->get();
protected $matchers = [ 'TomLingham\Searchy\Matchers\ExactMatcher' => 100, 'TomLingham\Searchy\Matchers\StartOfStringMatcher' => 50, 'TomLingham\Searchy\Matchers\InStringMatcher' => 30,];
protected $matchers = [ 'TomLingham\Searchy\Matchers\ExactMatcher' => 100, 'TomLingham\Searchy\Matchers\StartOfStringMatcher' => 50, 'TomLingham\Searchy\Matchers\AcronymMatcher' => 42, 'TomLingham\Searchy\Matchers\ConsecutiveCharactersMatcher' => 40, 'TomLingham\Searchy\Matchers\StartOfWordsMatcher' => 35, 'TomLingham\Searchy\Matchers\StudlyCaseMatcher' => 32, 'TomLingham\Searchy\Matchers\InStringMatcher' => 30, 'TomLingham\Searchy\Matchers\TimesInStringMatcher' => 8,];
完全一致
「fb」や「foo bar」、「」などの文字列の省略形に一致しますFred Brown"
文字列に一貫した連続文字が含まれているかどうかを照合します。さらに、一致する文字の割合も計算し、対応する乗算係数を適用します。たとえば、「fba」を検索すると、「foo bar」または「foo bar」と一致します。 「コウモリを恐れる」、「素晴らしい」とは一致しません
文字列の先頭の単語が一貫しているかどうかを照合します (たとえば、「jo ta」と「John Taylor」または「Joshua B. Takeshi」)。
キャメルケースの一致(たとえば、「hp」と「HtmlServiceProvider」または「HashParser」)。ただし、「hasProvider」とは一致しません
文字列包含一致(「smi」や「John Smith」など)または「Smiley Face」
含まれる文字列の数 マッチング。たとえば、「tha」を検索すると、「あの猫がそのネズミを捕まえてくれるといいのですが」 (3 回) または「ありがとう、とてもよかったです!」 と一致します。 (1×)
レーベンシュタインドライバーを参照。
独自の検索ドライバーの実装は非常に簡単で、TomLinghamSearchySearchDriversBaseSearchDriver を継承するクラスを作成し、$matchers 属性配列を追加するだけです。
独自のマッチャーを作成するには、TomLinghamSearchyMatchersBaseMatcher を継承するクラスを作成し、formatQuery メソッドをオーバーライドして、指定された位置に % ワイルドカードを使用して書式設定された文字列を返します。より高度な拡張機能を実装するには、buildQuery メソッドをオーバーライドする必要があります。