LoginSignup
1
1

Laravelで検索機能を実装

Posted at

この記事の背景

Laravelで検索機能を実装したのでその時のことを書いていきます。
キーワードを検索して部分一致で検索できる機能です。

検索機能の条件

1.ログインユーザー、未ログインユーザーでも検索できる
2.ユーザーの投稿を検索する機能
3.部分一致

特に1のログインユーザー、未ログインユーザーでも検索できる状態でないと
仕様としてあまり良くないみたいです。

こちらの記事も参考にしてください。

ルーティング

ルーティングの書き方です。トップページで検索する機能です。

web.php
//トップページ
Route::get('/', 'PostController@index')->name('post.index');

Controller

Controllerの説明をしていきます。

PostController.php
public function index(Request $request)
    {      
        $search = $request->input('keyword');//リクエストからkeywordパラメーターの値を取得し、$search変数に代入、ユーザーが検索フォームに入力したキーワードが格納される
        $query = Posts::query();Posts //モデルに対してクエリビルダを作成し、$query変数に代入してこのクエリビルダを使ってデータベースクエリを構築

        if (!empty($search)) {//$search変数が空でない時、つまりユーザーがキーワードを入力した場合に、検索条件を追加
            $query->where('text', 'LIKE', "%{$search}%");//textカラムがユーザーの入力したキーワードを部分一致で含む場合に検索条件を追加します。% はワイルドカード文字で、任意の文字列を表す
        } 

        $posts = $query->orderBy('id','desc')->paginate(10);//クエリビルダに対して、id カラムで降順に並び替えを行い、ページネーションを適用し取得するデータは1ページあたり10件
        return view('welcome', ['posts' => $posts, 'search' => $search]);//welcome ビューにデータを渡して、ビューを表示、$posts変数には検索結果が格納され、$search 変数にはユーザーが入力したキーワードが格納。ビュー内でこれらの変数を使用して結果を表示
    }

view

検索フォームの見た目はこんな感じで作りました。

 <form method="get" action="{{ route('post.index') }}" class="d-inline-block w-75">
     <div class="form-group ">
         <div class="input-group">
             <input type="text" name="keyword" class="form-control" placeholder="検索"  value="{{ request()->input('keyword') }}"autocomplete="on">
             <div class="input-group-append">
                 <button type="submit" class="btn btn-success">検索</button>
             </div>
         </div>
      </div>
 </form>

参考資料

ChatGptで調べました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1