【初心者向け】laravelで検索機能を実装する

はじめに

Laravelで検索機能を実装します。
イメージは下記の動画の感じ。

タイトル、タグ、本文に対してあいまい検索を行なっています。

実装開始

①inputタグを作る

まずはformのinputタグを作って見た目の部分を整えます。
今回はbootstrapを使っているので、classが見にくいかもしれません。

 <form class="form-inline my-2 my-lg-0 ml-2">
      <div class="form-group">
      <input type="search" class="form-control mr-sm-2" name="search"  value="{{request('search')}}" placeholder="キーワードを入力" aria-label="検索...">
      </div>
      <input type="submit" value="検索" class="btn btn-info">
  </form>

ポイントは

・formのactionを入れない事。
・inputのvalueをvalue=”{{request(‘search’)}}”にする事(入力すると値がURLに反映されます)。

辺りです!

②controllerに検索処理を書く

  $articles = Post::orderBy('created_at', 'asc')->where(function ($query) {

            // 検索機能
            if ($search = request('search')) {
                $query->where('title', 'LIKE', "%{$search}%")->orWhere('tag1','LIKE',"%{$search}%")->orWhere('body','LIKE',"%{$search}%")
                ;
            }

            // 8投稿毎にページ移動
        })->paginate(8);

検索機能のポイントは

・whereでLIKEを使う事であいまい検索にしている
・orWhereを使う事で、タイトル、タグ、本文今違って検索している

辺り!

ついでにページネーション入れる

ページネーションはこれですね。
検索結果や一覧ページをページに分けて表示するやつです。

Laravelに基本的な機能が備わっているので、秒で作れます!!

まずcontrollerにpaginateを記述します。
今回は8投稿でページ遷移します。

$articles = Post::orderBy('created_at', 'asc')->where(function ($query) {

            // 検索機能
            if ($search = request('search')) {
                $query->where('title', 'LIKE', "%{$search}%")->orWhere('tag1','LIKE',"%{$search}%")->orWhere('body','LIKE',"%{$search}%")
                ;
            }

            // 8投稿毎にページ移動
        })->paginate(8);

次にページネーションを設置したい所にこちらを記述します。

  <div class="d-flex justify-content-center ">
        {{ $articles->links() }}
  </div>

少し見た目を変えたいので、ファイルを変更します。

コマンドラインで下記を打ちます。

php artisan vendor:publish --tag=laravel-pagination

4つほどファイルが生成されます。
デフォルトではbootstrap-4.blade.phpが使われるようになっていて、そちらを利用すると完成です。

最後まで読んで頂きありがとうございます。

Laravelの案件に初めて入った時、この書籍にお世話になったので、Laravel学習をしたい人はぜひ!!

最近は実務よりの実践編も出ているらしいですね。

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
  • Attributes
  • Custom attributes
  • Custom fields
Click outside to hide the compare bar
Compare
Compare ×
Let's Compare! Continue shopping