fix no data and handle default page load no data
This commit is contained in:
@@ -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([
|
||||
|
||||
Reference in New Issue
Block a user