whereExists(function ($q) { $q->select(DB::raw(1)) ->from('hasil_analisis as h') ->whereColumn('h.periode_id', 'p.id'); }) ->orderBy('p.id', 'desc') ->select('p.*') ->get(); $availablePeriodeIds = $periodeList->pluck('id')->map(fn($id) => (string) $id); $periodeAktif = $request->periode_id && $availablePeriodeIds->contains((string) $request->periode_id) ? $periodeList->firstWhere('id', (int) $request->periode_id) : $periodeList->first(); $periodeId = $periodeAktif->id ?? null; // Evaluasi ini berbasis pseudo-label dari rating/rule otomatis $evaluasi = DB::table('evaluasi_model') ->when($periodeId, fn($q) => $q->where('periode_id', $periodeId)) ->orderByDesc('id') ->first(); $jumlahKelasAnalisis = DB::table('hasil_analisis') ->when($periodeId, fn($q) => $q->where('periode_id', $periodeId)) ->distinct('sentimen') ->count('sentimen'); $totalHasilAnalisis = DB::table('hasil_analisis') ->when($periodeId, fn($q) => $q->where('periode_id', $periodeId)) ->count(); // Dropdown wisata $wisataList = HasilAnalisis::query() ->select('wisata') ->when($periodeId, fn($q) => $q->where('periode_id', $periodeId)) ->distinct() ->pluck('wisata'); // Query hasil analisis dengan filter // Diurutkan berdasarkan tanggal ulasan terbaru dari tabel ulasan $query = HasilAnalisis::query() ->leftJoin('ulasan as u', 'hasil_analisis.ulasan_id', '=', 'u.id') ->select('hasil_analisis.*'); $query->when($periodeId, fn($q) => $q->where('hasil_analisis.periode_id', $periodeId)); if ($request->filled('wisata')) { $query->where('hasil_analisis.wisata', $request->wisata); } $hasil = $query ->orderByRaw('COALESCE(u.tanggal, hasil_analisis.created_at) DESC') ->orderBy('hasil_analisis.id', 'desc') ->paginate(10) ->withQueryString(); $standalone = true; return view('analisis.index', compact( 'hasil', 'wisataList', 'evaluasi', 'standalone', 'jumlahKelasAnalisis', 'totalHasilAnalisis', 'periodeAktif', 'periodeList' )); } }