前回は「削除機能」ページの作成をしました。
今回は「検索機能」を作成していきます。
(※検索対象は名前と Email にします。)
今回のゴール
【 今回の作業 】
・ビューの改修
・コントローラの改修
手順
INDEX
1)コントローラの改修
以前に作成した CrudController.php にある「一覧表示」の箇所を改修していきます。
/**
* 一覧表示
*/
public function getIndex(Request $rq)
{
//キーワード受け取り
$keyword = $rq->input('keyword');
//クエリ生成
$query = \App\Student::query();
//もしキーワードがあったら
if(!empty($keyword))
{
$query->where('email','like','%'.$keyword.'%');
$query->orWhere('name','like','%'.$keyword.'%');
}
// 全件取得 +ページネーション
$students = $query->orderBy('id','desc')->paginate(5);
return view('student.list')->with('students',$students)->with('keyword',$keyword);
}
2)ビューの改修
検索結果画面に推移しても、検索キーワードが表示されるように設定します。
<!-- 検索フォーム -->
<form method="get" action="" class="form-inline">
<div class="form-group">
<input type="text" name="keyword" class="form-control" value="{{$keyword}}" placeholder="名前やメールアドレス">
</div>
<div class="form-group">
<input type="submit" value="検索" class="btn btn-info" style="margin-left: 15px; color:white;">
</div>
</form>
3)ページネーションの改修
ページネーションに検索キーワードの持ち回りの設定をします。
<!-- ページネーション -->
{!! $students->appends(['keyword'=>$keyword])->render() !!}
この辺りの解説は以下のページ「クエリービルダーまとめ」にある
「8. ページネーションをつける」
「25. 検索 keyword(パラメータ)の持ち回り」
に記載しています。
4)動作確認
ブラウザを開いて http://localhost/student/list にアクセスします。
上記のようにレコードの検索がされればOKです。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。