前提
下記記事に沿って、投稿記事の並べ替え機能を設定済みであること。
困ったこと
追加でページネーションを設定したところ、並べ替えが維持されるのは1ページ目のみで、2ページ目以降では順番が維持されない。
やりたいこと
ページネーションを設定し、1ページ目で並べ替えた通りに2ページ目以降も表示させる。
コントローラーの変更
すでにkyslik/column-sortable
をインストールしてsortable
メソッドを使用している。その上でページネーションと組み合わせる場合は、クラス名::sortable()->paginate(数字)
とする。
もともと
app/Http/Controllers/RecordController.php
public function index(){
$records = Record::sortable()->get(); //変更前
return view('record.list',['records' => $records]);
}
変更後(1ページにつき記事を5つ表示する)
app/Http/Controllers/RecordController.php
public function index(){
$records = Record::sortable()->paginate(5); //変更後
return view('record.list',['records' => $records]);
}
ビューの変更
resources/views/record/list.blade.php
@foreach($records as $record)
<tr class='text-lg container mx-auto leading-10'>
.
.
.
</tr>
@endforeach
</table>
<div class="inline-flex items-center">
{{ $records->appends(request()->query())->links() }}
</div>
単にページネーションを設定するときは{{ $変数名->links() }}
とするところを、{{ $変数名->appends(request()->query())->links() }}
とすることで、並べ替え内容を2ページ目まで維持することができる。