MIF_E31231226/app/Http/Controllers/AnalisisController.php

84 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\HasilAnalisis;
use Illuminate\Support\Facades\DB;
class AnalisisController extends Controller
{
public function index(Request $request)
{
$periodeList = DB::table('periode_analisis as p')
->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'
));
}
}