diff --git a/src/app/Http/Controllers/HomeController.php b/src/app/Http/Controllers/HomeController.php index 861545d9..19ac3ae5 100644 --- a/src/app/Http/Controllers/HomeController.php +++ b/src/app/Http/Controllers/HomeController.php @@ -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')); } } \ No newline at end of file