fix no data and handle default page load no data

This commit is contained in:
arifal
2025-08-26 13:59:36 +07:00
parent c6257b79bf
commit 63310f2748
4 changed files with 487 additions and 133 deletions

View File

@@ -67,30 +67,64 @@ class QuickSearchController extends Controller
public function public_search_datatable(Request $request)
{
try {
// Hanya proses jika ada keyword search
if (!$request->filled('search') || trim($request->get('search')) === '') {
return response()->json([
'data' => [],
'total' => 0,
'current_page' => 1,
'last_page' => 1,
'per_page' => 15,
'from' => null,
'to' => null
]);
}
$search = trim($request->get('search'));
// Validasi minimal 3 karakter
if (strlen($search) < 3) {
return response()->json([
'data' => [],
'total' => 0,
'current_page' => 1,
'last_page' => 1,
'per_page' => 15,
'from' => null,
'to' => null,
'message' => 'Minimal 3 karakter untuk pencarian'
]);
}
// Gunakan subquery untuk performa yang lebih baik dan menghindari duplikasi
$query = PbgTask::select([
'pbg_task.*',
DB::raw('(SELECT name_building FROM pbg_task_details WHERE pbg_task_details.pbg_task_uid = pbg_task.uuid LIMIT 1) as name_building'),
DB::raw('(SELECT nilai_retribusi_bangunan FROM pbg_task_retributions WHERE pbg_task_retributions.pbg_task_uid = pbg_task.uuid LIMIT 1) as nilai_retribusi_bangunan')
])
->where(function ($q) use ($search) {
$q->where('pbg_task.registration_number', 'LIKE', "%$search%")
->orWhere('pbg_task.name', 'LIKE', "%$search%")
->orWhere('pbg_task.owner_name', 'LIKE', "%$search%")
->orWhere('pbg_task.address', 'LIKE', "%$search%")
->orWhereExists(function ($subQuery) use ($search) {
$subQuery->select(DB::raw(1))
->from('pbg_task_details')
->whereColumn('pbg_task_details.pbg_task_uid', 'pbg_task.uuid')
->where('pbg_task_details.name_building', 'LIKE', "%$search%");
});
})
->orderBy('pbg_task.id', 'desc');
if ($request->filled('search')) {
$search = trim($request->get('search'));
$query->where(function ($q) use ($search) {
$q->where('pbg_task.registration_number', 'LIKE', "%$search%")
->orWhere('pbg_task.name', 'LIKE', "%$search%")
->orWhere('pbg_task.owner_name', 'LIKE', "%$search%")
->orWhereExists(function ($subQuery) use ($search) {
$subQuery->select(DB::raw(1))
->from('pbg_task_details')
->whereColumn('pbg_task_details.pbg_task_uid', 'pbg_task.uuid')
->where('pbg_task_details.name_building', 'LIKE', "%$search%");
});
});
$result = $query->paginate();
// Tambahkan message jika tidak ada hasil
if ($result->total() === 0) {
$result = $result->toArray();
$result['message'] = 'Tidak ada data yang ditemukan';
}
return response()->json($query->paginate());
return response()->json($result);
} catch (\Throwable $e) {
Log::error("Error fetching datatable data: " . $e->getMessage());
return response()->json([