0
2

日付ごとのページネーション取得でリンクを押すと日付がリセットされてしまう原因、対処したこと

Last updated at Posted at 2024-06-05

前提条件

ある勤怠管理アプリを作成中、レコードに保存した勤務時間や休憩時間などを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 23.52.26.png
当日(2024/06/05)

スクリーンショット 2024-06-05 23.54.57.png
当日(2024/06/05)の2ページ目

当日のページネーションは切替可能

スクリーンショット 2024-06-05 23.58.33.png
前日(2024/06/04)
日付の切り替えは出来ているが・・・
スクリーンショット 2024-06-06 0.01.40.png
次を選択すると当日(2024/06/05)の2ページ目に移行してしまう。

解決方法

どうやらページネーションのlinks()に現在の日にち情報を付け加える必要があるそう。

{{ $records->appends(['date' => $date])->links() }}

appends()に配列で日付を渡さなくてはならないので['date' => $date]で現在の日付をクエリパラメータとしてページネーションリンクに追加する必要がある。
スクリーンショット 2024-06-06 0.11.03.png

今回の場合2024/06/04は6件取得しているため、残り1件が2ページ目として無事表示されるようになった。

最後に

初めてqiitaに記事を投稿してみましたが、おそらく勘違いして認識していることが多々あると思います。記事内で気になったこと、これは間違っていると思ったことがあれば指摘していただけたら幸いです。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2