前提条件
ある勤怠管理アプリを作成中、レコードに保存した勤務時間や休憩時間などをwhereで該当する日付を絞り込み、paginate(5)で5件ずつのデータを取り出しました。
public function index(Request $request)
{
$date = $request->input('date');
if(isset($date)){
$today = Carbon::parse($date);
$yesterday = $today->copy()->subDay(1)->format('Y/m/d');
$tomorrow = $today->copy()->addDay(1)->format('Y/m/d');
$records = Time::where('date', [$date])->paginate(5);
}else{
$today = Carbon::today();
$yesterday = $today->copy()->subDay(1)->format('Y/m/d');
$tomorrow = $today->copy()->addDay(1)->format('Y/m/d');
$date = $today->format('Y/m/d');
$records = Time::where('date', [$date])->paginate(5);
};
そしてblade側にlinks()を定義しました。
<div class="attendance__record">
<table class="attendance__table">
<tr>
<th>名前</th>
<th>勤務開始</th>
<th>勤務終了</th>
<th>休憩時間</th>
<th>勤務時間</th>
</tr>
@foreach($records as $record)
<tr>
<td>{{$record['user']['name']}}</td>
<td>{{$record['start_time'];}}</td>
<td>{{$record['end_time']}}</td>
<td>{{$record['break_time']}}</td>
<td>{{$record['work_time']}}</td>
</tr>
@endforeach
</table>
</div>
{{ $records->links() }}
症状
しかし取得した当日はリンクを押すことで取得したレコードを5件ずつ切り替えられるが、前日もしくは翌日に日付を切り替えた後リンクを押すと最初に取得した当日の日付に戻ってしまう。
当日(2024/06/05)
当日のページネーションは切替可能
前日(2024/06/04)
日付の切り替えは出来ているが・・・
次を選択すると当日(2024/06/05)の2ページ目に移行してしまう。
解決方法
どうやらページネーションのlinks()に現在の日にち情報を付け加える必要があるそう。
{{ $records->appends(['date' => $date])->links() }}
appends()に配列で日付を渡さなくてはならないので['date' => $date]で現在の日付をクエリパラメータとしてページネーションリンクに追加する必要がある。
今回の場合2024/06/04は6件取得しているため、残り1件が2ページ目として無事表示されるようになった。
最後に
初めてqiitaに記事を投稿してみましたが、おそらく勘違いして認識していることが多々あると思います。記事内で気になったこと、これは間違っていると思ったことがあれば指摘していただけたら幸いです。