実現したいこと
勤怠管理アプリに関して
打刻した日の一覧を表示するため、TOPに日を表示させたい
前提
テーブルはユーザー、出退勤、休憩の3つ
コントローラーも同様
現在一覧ページはユーザーテーブルから紐付けして表示している
発生している問題・エラーメッセージ
Undefined variable: attendance (View: /var/www/resources/views/attendance.blade.php) Possible typo $attendance
該当のソースコード
・日別一覧
@extends('layouts.app') @section('css') <link rel="stylesheet" href="{{ asset('css/attendance.css') }}"> @endsection @section('content') <div class="attendance__content"> <div class="attendance__top"> <form method="GET"> <label for="date">日付:</label> <input type="date" name="date" id="date" value="{{ $date }}"> <button type="submit">検索</button> </form> <p>表示日付: {{ $date ?? '-'}}</p> </div> <table> <thead> <tr> <th>名前</th> <th>勤務開始</th> <th>勤務終了</th> <th>休憩時間</th> <th>勤務時間</th> </tr> </thead> <tbody> @foreach ($users ?? '' as $user) @foreach ($user->attendances as $attendance) <tr> <td>{{ $user->name }}</td> <td>{{ $attendance->start_time ?? '-' }}</td> <td>{{ $attendance->end_time ?? '-' }}</td> <td>{{ $attendance->total_rest_time }} 分</td> <td>{{ $attendance->working_hours }}</td> </tr> @endforeach @endforeach </tbody> </table> <!-- <div class="pagination"> --> <!-- <a href="#"><</a> <a href="#">1</a> <a href="#">2</a> <a href="#">></a> --> <!-- </div> --> </div> @endsection
・コントローラー
public function today(Request $request) { $date = $request->input('date'); // フォームから受け取った日付 $users = User::with('attendances') ->whereHas('attendances', function ($query) use ($date) { $query->whereDate('start_time', $date); }) ->get(); return view('attendance', compact('users', 'date')); } public function showData() { $users = User::with('attendances', 'attendances.rests')->get(); foreach ($users as $user) { foreach ($user->attendances as $attendance) { $totalRestTime = DB::table('rests') ->where('attendance_id', $attendance->id) ->sum(DB::raw('TIMESTAMPDIFF(MINUTE, start_time, end_time)')); $attendance->total_rest_time = $totalRestTime; } } if ($attendance->start_time && $attendance->end_time) { $startTime = \Carbon\Carbon::parse($attendance->start_time); $endTime = \Carbon\Carbon::parse($attendance->end_time); // 勤務時間(分) $totalWorkingMinutes = $endTime->diffInMinutes($startTime); // 休憩時間を引く $workingMinutes = $totalWorkingMinutes - $totalRestTime; // 時間と分にフォーマット(例: 8時間30分) $hours = floor($workingMinutes / 60); $minutes = $workingMinutes % 60; $attendance->working_hours = sprintf('%d時間%d分', $hours, $minutes); } else { $attendance->working_hours = '-'; // 開始または終了時刻がない場合 } // $attendance->save(); return view('attendance', compact('users')); } }
試したこと
日にちを表示するために新たにコントローラーメソッドを追加して表示を試みた
→今まで作動していたattendanceの定数が反応しなくなった
お手数ですがご教示いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー

2024/12/11 06:53