laravel 6.x paginationで2ページ目以降も検索条件を引き継ぐ書き方

検索フォームから検索結果に遷移した後、2ページ目以降も検索条件を引継ぎたい

### bladeのページネーション

{{$data->render()}}

{{$data->appends(request()->input())->render()}}

こう書いたんだが、2ページ目以降、一向反映されない。
何故だああああああ????
(※今日はbiz confortってコワーキングに行こうと思って、横浜元町まで来たら祝日でやってないじゃないか。。。何故だあああああ)

フラ〜とアクエリアス飲んで考えてたら、気が付いた。appendsは、パラメータを配列で渡すメソッドなので、検索フォームはGETメソッドでないと上手く動作しない

### 検索フォーム

{!! Form::open(['method'=>'POST', 'action'=>'HogeController@index']) !!}
// 省略
{!! Form::close() !!}

{!! Form::open(['method'=>'GET', 'action'=>'HogeController@index']) !!}
 <input type="hidden" name="search" value="{{ rand() }}">
// 省略
{!! Form::close() !!}

Postメソッド時のControllerでの検索時の処理は、isMethod(‘post’)で判定していたが、Getメソッドの場合は、hiddenでname=”search”をcontrollerに送って、それで判定する事にした。

### Controller

if($request->isMethod('post')){
$inputs = $request->all();
$query = Data::query();
// 検索処理 省略 
}

if($request->has('search')){
  $inputs = $request->all();
  $query = Data::query();
// 検索処理 省略 
}

FORMはセキュリティ上、POSTメソッドしか使わないと考えてたが、ユーザ検索のページネーションの処理では、POSTメソッドではなくGETメソッドの方が都合が良い、ということを理解しました。

Laravel ページングの書き方

グローバルのrender()を使います。

AdminPostsController.php

public function index()
    {
        // $posts = Post::all();
        $posts = Post::paginate(4);
        return view('admin.posts.index', compact('posts'));
    }

posts/index.blade.php

<div class="row">
		<div class="col-sm-6 col-sm-offset-5">
			{{$posts->render()}}
		</div>
    </div>

URLに自動的に?page=${n} が付与されます。

super amazing! あれほどページングべた書きに苦労したのは一体何だったんだ