queryメソッドで検索機能を作成【Laravel】

Laravel

laravelのqueryメソッドについて詳しく知りたい!

こういった悩みを持っている方への記事です。

筆者は現在Laravelの学習中でして、学習中の気づきやまとめをブログを通してアウトプットしています。

自分自身が開発の最中にハマったところや理解しにくかったところを重点的にピックアップしてまとめています。

本記事では、新しくqueryメソッドを使っての検索機能を作ったので、queryメソッドとその使い方の一例を解説します。

5分で読めるので、Laravelのqueryメソッドについて知りたい方は最後まで読んでみてください。

queryメソッドとは

クエリストリングからのみ値を取得するためのメソッドです。

クエリストリング(query string)とは?
→クエリ文字列のこと。

例:http://localhost:8000/sample?test=123 のtest=123の部分

queryメソッドで検索機能を作成する(例)

queryメソッドの使い方を実際のコードを通して見ていきます。

View

<form action="{{route('ルート名')}}" method="GET">
  <input type="text" name="search"> //1
</form>

Controller

public function search(Request $request) 
{
  $post = request()->query('search'); //2

  if($post)
  {
   $posts = Post::where('title', 'LIKE', "%{$post}%")->simplePaginate(3); //3
  } else {
   $posts = Post::simplePaginate(3); //4
  };

  return view('welcome')->with('posts', $posts); //5
}

解説

  1. queryメソッドに、viewのinputタグに指定したname属性の値(ここではsearch)を記載
  2. $post変数に格納
  3. where句で検索しレコードを取得
  4. 検索結果がない場合は、そのままPostのレコードを返す
  5. Viewに返す

同じクエリ文字列でページネーション

ページネーションリンクにクエリ文字列を付け加えることで、queryメソッドで取得したレコードのみページネーションで表示させることができます。

View

{{$posts->appends(['search' => request()->query('search')])->links()}}

通常のページネーションに、appendメソッドを追加することでURLのパラメータにクエリ文字列を追加することがます。

これで、検索したレコードのみのページネーション実現できます。

まとめ

今回はLaravelのqueryメソッドについて解説しました。

Laravelには他にも便利なメソッドや機能があると思うので、使っていきたいですね。

ご指摘等ございましたら、ご遠慮なくおっしゃっていただけますと幸いです。

参考サイト

データベース:クエリビルダ 5.7 Laravel
【Laravel】クエリ文字列でURLからパラメータを取得する方法について解説します
こんにちは。たいら(@tairaengineer2)です。転職を繰り返し現在4社経験している、10年目エンジニアです。この記事では、 PHPのフレームワークの1つであるLaravelでクエリ文字列でURLからパラメータを取得する方法について
クエリ文字列(URLパラメーター)とは?Webサービス上の用途とその役割
ショッピングサイトやブログなど、Webサイトの集客方法にはさまざまな手段がありま...
Laravel クエリビルダ記法まとめ
Laravel のクエリビルダは、SQL 文がわからなくても簡単にクエリを組み立てる事のできます。データベースからレコードを取得する際には SQL 文を組み立てて、それによって問い合わせを行いますが、SQL文に詳しくなくても、この機能によって適切な書式で問い合わせを行える為、とても便利な機能です。今回はLaravelの...
Laravelのページネーションが便利すぎた|Laravel|PHP|開発ブログ|株式会社Nextat(ネクスタット)
開発ブログ|他のフレームワークでページネーションといえば、デフォルトでは備わっていない上にどのプラグインも一長一