Laravelで検索機能を実装したので備忘録として残しておきます。
やりたいこと
投稿機能を作成して投稿した内容を部分一致検索で検索をかける。
テーブル
- id
- titiel: 投稿のタイトル
- body: 投稿の内容
手順
1.ルーティングの作成
2.検索フォームを作成
3. 検索機能実装
2.検索フォームの作成
viewでグリッドシステムを使用してフォームを作成します。
<div class="post-search-form col-md-6">
<form class="form-inline" action="{{ route('post.index') }}">
<div class="form-group">
<input type="text" name="key" class="form-control" placeholder="キーワードを入力">
</div>
<input type="submit" value="検索" class="btn btn-info">
</form>
</div>
3.検索機能の実装
Controlloerで受け取ったキーワードを元に部分一致する投稿の抽出。
public function index(Request $request)
{
$key = $request->key;
$query = Post::query();
if (!empty($key)) {
$query->where('title', 'like', '%' . $key . '%')->orWhere('body', 'like', '%' . $key . '%');
}
$posts = $query->orderBy('created_at', 'desc')->paginate(10);
return view('posts.index', compact('posts'));
}
手順
- キーワードの受け取り
- キーワードがあればsql文の
like
を使用して部分一致で一致する投稿の抽出 - 取得した内容をviewへ送る
検索のキーワードをなしにして送ると全件抽出されます。