fix(controller): resolve F-01 — HomeController now matches MapController dashboard data query

This commit is contained in:
root
2026-05-30 22:20:20 +08:00
parent e6992a03cf
commit f58fc6fb77

View File

@@ -8,11 +8,37 @@ class HomeController extends Controller
{
public function index()
{
$stations = DB::table('station')
->select('stationid', 'name', 'district', 'lat', 'lng', 'rainfall', 'waterlevel', 'siren')
->orderBy('stationid')
$data = DB::table('station as s')
->leftJoin('rainfall as r', function($join) {
$join->on('r.stationid', '=', 's.stationid')
->whereRaw('r.timestamp = (SELECT MAX(timestamp) FROM rainfall WHERE stationid = s.stationid)');
})
->leftJoin('waterlevel as w', function($join) {
$join->on('w.stationid', '=', 's.stationid')
->whereRaw('w.datetime = (SELECT MAX(datetime) FROM waterlevel WHERE stationid = s.stationid)');
})
->leftJoin('siren as sir', function($join) {
$join->on('sir.stationid', '=', 's.stationid')
->whereRaw('sir.active_time = (SELECT MAX(active_time) FROM siren WHERE stationid = s.stationid)');
})
->whereNotNull('s.lat')
->whereNotNull('s.lng')
->where(function($query) {
$query->whereNotNull('r.hourly')
->orWhereNotNull('w.waterlevel');
})
->select(
's.*',
'r.hourly as rainfall_value',
'r.timestamp as rainfall_time',
'w.waterlevel as waterlevel_value',
'w.datetime as waterlevel_time',
'sir.level as siren_level',
'sir.active_time as siren_time'
)
->orderBy('s.stationid', 'asc')
->get();
return view('layout.dashboard', compact('stations'));
return view('layout.dashboard', compact('data'));
}
}