質問するログイン新規登録

Q&A

解決済

1回答

686閲覧

Laravelのデータ日時の表示方法

satoshi_1218

総合スコア5

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2024/12/09 13:58

0

0

実現したいこと

勤怠管理アプリに関して
打刻した日の一覧を表示するため、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="#">&lt;</a> <a href="#">1</a> <a href="#">2</a> <a href="#">&gt;</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の定数が反応しなくなった

お手数ですがご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答1

0

ベストアンサー

ざっと見た限りですが、質問文内にある情報だけを見ると、viewに$attendanceが渡っているようには見えません。

return view('attendance', compact('users'));

return view('attendance', compact('users', 'attendance'));

にしてみるとか?

投稿2024/12/10 03:39

AbeTakashi

総合スコア4960

satoshi_1218

2024/12/11 06:53

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.25%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問