Laravelでサイト内に検索フォームを無料で簡単に設置する方法

Laravel・PHP豆知識・トラブル対策

Spatie Searchableパッケージで、Laravelで簡単に検索フォームを設置する方法を解説します。

Googleの検索ボックスは会員制サイトはムリ。
ScoutとAlgoriaを使う方法もありますが、Algoriaは一定以上利用すると有料になります。

「回数制限付きだと落ち着かない」
「条件なしで無料で使いたい!」

という場合には、今回ご紹介するパッケージがおすすめ。

Laravelでサイト内全文検索フォームを無料で簡単に設置する方法

今回は、textsテーブルのbodyカラムを検索するフォームを作っていきます。

データベース内のテーブルは、このような構造になっています。

今回はこの中の bodyカラムの中身を検索。

検索結果は titleカラムを表示するようにします。

仕上がりイメージはこちら。

①パッケージインストール

まずはパッケージをインストールしましょう。

②モデルファイルを編集

次に検索対象のモデルファイルを開きます。

一番上にuse宣言を入れ、さらにimplements Searchableと加えます。

さらに getSearchResultメソッドを追加。

メソッド内のABの部分は、状況に応じて変更してください。

A検索結果のリンク先となります。

通常は (モデル名.show) のルート設定を入れておきます。

Bは検索結果で表示したいカラムを入れます。

③ ルート設定を作成

次に、ルート設定を作成しておきます。

④ コントローラーを作成

次に、コントローラーを作成します。

コントローラーの最初に、searchableと、検索に使うモデルのためのuse宣言を入れます。

C には検索するモデル名と、カラムを入れます。

これで下準備完了。

⑤ 検索ボックスを作成

次にビュー部分を作っていきます。

最初に検索ボックスですが、action に先ほど作成した search.result を設定する以外は、通常どおり。

デザインはお好きなものにしてください。

⑥ 検索結果表示画面を作成

次にroutes/views の中にsearchフォルダを作り、その中にresult.blade.phpファイルを作成します。

これで出来上がり。

なお、検索対象のモデル(テーブル)は複数設定できます。

その場合、他のモデルも同じように設定します。

さらにコントローラーの「C 」の部分をコピペし、追加したモデルの情報も入れるようにしてください。

じゅんこ
じゅんこ

素敵な検索ボックスを作って、サイトの使い勝手をあげいきましょう♪

Laravel・PHP豆知識・トラブル対策

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

 

Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
デプロイ講座付。StripeやChatGPT連携など過去10回分のセミナー動画視聴可能。

Laravel実践スキルをのばしたい方におすすめです。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました