ホームページ >バックエンド開発 >PHPチュートリアル >Laravel Searchy 拡張パッケージを使用して、Laravel に軽量のデータベースベースの検索機能を実装します。
注: Laravel 4 と互換性を持たせたい場合は、https://github.com/TomLingham/Laravel-Searchy/tree/1.0 を参照してください
"require": { "tom-lingham/searchy" : "2.*"}次に、composer update を実行して、依存関係をベンダー ディレクトリにダウンロードします。
インストールが完了したら、config/app.php のプロバイダーにサービスプロバイダーを登録する必要があります:
TomLingham\Searchy\SearchyServiceProvider::classちなみに、対応するファサードを config/app.php のエイリアスに登録します:
'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();Query connection/cascade フィールド
場合によっては、カスケード フィールドを検索する必要がある場合があります。たとえば、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();生成された設定ファイル searchy.php では、現在、検索に使用されるデフォルトのドライバーを設定できます。 、シンプル、レーベンシュタインがサポートされています。
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 メソッドをオーバーライドする必要があります。