where('park_id', $park_id)->first(); $zones = DB::table('zone') ->leftJoin('psection', 'zone.psection_id', '=', 'psection.psection_id') ->leftJoin('ptype', 'zone.ptype_id', '=', 'ptype.ptype_id') ->select('zone.*', 'psection.psection_subject', 'ptype.ptype_subject') ->where('zone.park_id', $park_id) ->get(); $reserves = DB::table('reserve') ->join('zone', function ($join) { $join->on('reserve.psection_id', '=', 'zone.psection_id') ->on('reserve.ptype_id', '=', 'zone.ptype_id'); }) ->join('ptype', 'zone.ptype_id', '=', 'ptype.ptype_id') ->where('reserve.park_id', $park_id) ->where('reserve.valid_flag', 1) ->select('reserve.*', 'ptype.ptype_subject') ->get(); $zoneStandardSum = []; foreach ($zones as $zone) { $key = $zone->psection_subject; // 「自転車」「原付」など if (!isset($zoneStandardSum[$key])) { $zoneStandardSum[$key] = 0; } $zoneStandardSum[$key] += $zone->zone_standard; } // 空き台数集計用配列 $vacancyData = []; foreach ($zones as $zone) { $key = $zone->psection_id . '_' . $zone->ptype_subject; if (!isset($vacancyData[$key])) { $vacancyData[$key] = 0; } // zone_tolerance - zone_number を合計 $vacancyData[$key] += ($zone->zone_tolerance - $zone->zone_number); } // reserve件数分を減算 foreach ($reserves as $reserve) { $key = $reserve->psection_id . '_' . $reserve->ptype_subject; if (isset($vacancyData[$key])) { $vacancyData[$key] -= 1; // 1件分減算 } } // 更新期間取得 $city_grace_periods = DB::table('city') ->select('city_id', 'update_grace_period_start_date', 'update_grace_period_start_time', 'update_grace_period_end_date', 'update_grace_period_end_time') ->whereIn('city_id', function ($query) { $query->select('city_id')->from('park'); }) ->get() ->keyBy('city_id'); // 必要なら他テーブルJOINや追加情報も取得 return response()->json([ 'html' => view('regular_contract.park_detail', compact('park', 'zones', 'reserves', 'zoneStandardSum', 'vacancyData', 'city_grace_periods'))->render() ]); } public function showWait($reserve_id) { $reserve = DB::table('reserve')->where('reserve_id', $reserve_id)->first(); $park = DB::table('park')->where('park_id', $reserve->park_id)->first(); $zones = DB::table('zone') ->leftJoin('psection', 'zone.psection_id', '=', 'psection.psection_id') ->leftJoin('ptype', 'zone.ptype_id', '=', 'ptype.ptype_id') ->select('zone.*', 'psection.psection_subject', 'ptype.ptype_subject') ->where('zone.park_id', $park->park_id) ->get(); $zoneStandardSum = []; foreach ($zones as $zone) { $key = $zone->psection_subject; // 「自転車」「原付」など if (!isset($zoneStandardSum[$key])) { $zoneStandardSum[$key] = 0; } $zoneStandardSum[$key] += $zone->zone_standard; } // 必要なら他テーブルJOINや追加情報も取得 return response()->json([ 'html' => view('park_waitlist.park_detail', compact('park', 'zones', 'reserve', 'zoneStandardSum'))->render() ]); } }