実現させたいこと
現在勤怠打刻機能を作成しております。
休憩時間を何回でも取得できるように勤怠打刻テーブル(stamps)、休憩打刻テーブル(rests)を1対多のリレーションをさせています。
現在は(stamps)にカラム(total_rest)を持たせ、(rests)で休憩時間を算出してカラム(rest_time)に値を入れてwhere('stamp_id',$timestamp->id)->sum('rest_time')として合計値を('stamps.total_rest')に入れています。
やりたいこととしては(stamps.total_rest)を使わずに休憩テーブル(rests)の同じ外部キー(stamp_id)を持った休憩時間の合計値を算出してviewに表示させたいです。
テーブル仕様
ソースコード
Controller
1 2public function showTable() 3 { 4 $user = Auth::user(); 5 $date = date("Y-m-d"); 6 $stampDate = Stamp::select('stamp_date')->get(); 7 if (!$stampDate) { 8 return redirect()->back()->with(['message' => '勤務履歴がありません', 'status' => 'alert']); 9 } 10 11 $stamps = Stamp::join('users', 'users.id', 'user_id') 12 // ->join('rests','stamps.id','stamp_id') 13 ->where('stamp_date', $date) 14 ->orderBy('stamps.updated_at','asc') 15 ->paginate(5); 16 17 return view('showTable', compact('stamps', 'date')); 18 } 19 20 public function search(Request $request) 21 { 22 $date = $request->date; 23 $stamps = Stamp::join('users', 'users.id', 'user_id') 24 ->where('stamp_date', $date) 25 ->orderBy('stamps.updated_at', 'asc') 26 ->paginate(5); 27 28 return view('showTable', compact('stamps', 'date')); 29 }
view
1<x-app-layout> 2 <x-slot name="header"> 3 <div class="flex justify-between"> 4 <h2 class="font-semibold text-xl text-gray-800 leading-tight"> 5 勤務一覧 6 </h2> 7 <div class="text-xl"> 8 <p>本日の日付</p> 9 <div>{{date('Y-m-d')}}</div> 10 </div> 11 </div> 12 </x-slot> 13 14 <div class="py-12"> 15 <div class="max-w-7xl mx-auto sm:px-6 lg:px-8"> 16 <section class="text-gray-600 body-font"> 17 <div class="container px-5 mx-auto"> 18 <div class="flex flex-col justify-around text-center w-full mb-20"> 19 <h1 class="sm:text-4xl text-3xl font-medium title-font mb-2 text-gray-900"> 20 {{$date}}の勤務一覧 21 </h1> 22 <form method="post" action="{{route('search')}}"> 23 @csrf 24 @method('post') 25 <div> 26 <label for="date" class="mr-2">日付を選択して下さい</label> 27 <input type="date" name="date" value="date" id="date" class="mr-2"> 28 <button class="text-white bg-blue-500 border-0 py-2 px-6 focus:outline-none hover:bg-blue-600 rounded">検索</button> 29 </div> 30 </form> 31 </div> 32 <div class="lg:w-2/3 w-full mx-auto overflow-auto"> 33 <div class="text-xl text-blue-600 ml-4">{{$date}}勤務一覧を表示中</div> 34 35 <table class="table-auto w-full text-left whitespace-no-wrap"> 36 <thead> 37 <tr> 38 <th class="px-4 py-3 title-font tracking-wider font-medium text-gray-900 text-sm bg-gray-100 rounded-tl rounded-bl">名前</th> 39 <th class="px-4 py-3 title-font tracking-wider font-medium text-gray-900 text-sm bg-gray-100">勤務開始</th> 40 <th class="px-4 py-3 title-font tracking-wider font-medium text-gray-900 text-sm bg-gray-100">勤務終了</th> 41 <th class="px-4 py-3 title-font tracking-wider font-medium text-gray-900 text-sm bg-gray-100">休憩時間</th> 42 <th class="px-4 py-3 title-font tracking-wider font-medium text-gray-900 text-sm bg-gray-100">勤務時間</th> 43 </tr> 44 </thead> 45 <tbody> 46 <tr> 47 @foreach($stamps as $stamp) 48 <td class="px-4 py-3">{{$stamp->name}}</td> 49 <td class="px-4 py-3">{{$stamp->start_work}}</td> 50 <td class="px-4 py-3">{{$stamp->end_work}}</td> 51 <td class="px-4 py-3">{{$stamp->total_rest}}</td> 52 <td class="px-4 py-3">{{gmdate("H:i:s",(strtotime($date.$stamp->end_work)-strtotime($date.$stamp->start_work)))}}</td> 53 </tr> 54 @endforeach 55 </tbody> 56 </table> 57 {{$stamps->links()}} 58 </div> 59 </div> 60 </section> 61 </div> 62 </div> 63</x-app-layout> 64
試したこと
join('rests','stamps.id','stamp_id')としてviewの部分でforeach($stamp->rests as $rest)で回して算出してみたが1レコードずつ表示され休憩時間の合計値を取得できない。
なにかアドバイス頂けると幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/04 06:21