Membuat Datatable Dengan AJAX Part 1
Membuat Datatable Dengan AJAX Part 1
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
protected $fillable = [
'username','name','email'
];
}
7. Buat Rute Baru (Hapus semua rute bawaan) Rute index untuk menampilkan view
langsung di public dan Rute getEmployees untuk Method Ajax untu Datatable
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeesController;
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Employees;
// Fetch records
public function getEmployees(Request $request){
## Read value
$draw = $request->get('draw');
$start = $request->get("start");
$rowperpage = $request->get("length"); // Rows display per page
$columnIndex_arr = $request->get('order');
$columnName_arr = $request->get('columns');
$order_arr = $request->get('order');
$search_arr = $request->get('search');
// Total records
$totalRecords = Employees::select('count(*) as allcount')->count();
$totalRecordswithFilter = Employees::select('count(*) as allcount')-
>where('name', 'like', '%' .$searchValue . '%')->count();
// Fetch records
$records = Employees::orderBy($columnName,$columnSortOrder)
->where('employees.name', 'like', '%' .$searchValue . '%')
->select('employees.*')
->skip($start)
->take($rowperpage)
->get();
$data_arr = array();
foreach($records as $record){
$id = $record->id;
$username = $record->username;
$name = $record->name;
$email = $record->email;
$data_arr[] = array(
"id" => $id,
"username" => $username,
"name" => $name,
"email" => $email
);
}
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordswithFilter,
"aaData" => $data_arr
);
return response()->json($response);
}
}
9. Buat View Dengan nama index.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Datatables AJAX pagination with Search and Sort in Laravel
10</title>
</head>
<body>
// DataTable
$('#empTable').DataTable({
processing: true,
serverSide: true,
ajax: "{{route('getEmployees')}}",
columns: [
{ data: 'id' },
{ data: 'username' },
{ data: 'name' },
{ data: 'email' },
]
});
});
</script>
</body>
</html>
10. Buka localhost – toko –public (Pastikan Internetnya aktif ya, karena kita
menggunakan CSS, AJAX dan JS Datatabel online dari CDN)
Kolom pencarian
Silahkan di klik pada No, Username, Name atau Email untuk Sorting a – z atau z-a
11. Wah ternyata datanya kosong ya… yuk kita bikin data fakenya.
php artisan make:seeder EmployeesSeeder
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
use Illuminate\Support\Arr;
use App\Models\Employees;
use Faker\Factory as Faker;
]);
$faker = Faker::create('id_ID');
Employees::create([
'username' => $faker->username,
'name' => $faker->name,
'email' => $faker->name,
]);
}
}
}
14. Gimana…. Cek lagi halaman localhost – toko –public udah ada isi belum… kalau
belum…. Anda belum beruntung….. Coba Lagi ya….
15. Tambahan..
Silahkan buat CRUD untuk melengkapinya. Namun bauatkan rute baru, controller baru dan
View Baru untuk CRUD tersebut.
Lanjutan CRUD.
Route::resource('/karyawan', \App\Http\Controllers\
KaryawanController::class);
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// Fetch records
public function getEmployees(Request $request){
## Read value
$draw = $request->get('draw');
$start = $request->get("start");
$rowperpage = $request->get("length"); // Rows display per page
$columnIndex_arr = $request->get('order');
$columnName_arr = $request->get('columns');
$order_arr = $request->get('order');
$search_arr = $request->get('search');
// Total records
$totalRecords = Employees::select('count(*) as allcount')->count();
$totalRecordswithFilter = Employees::select('count(*) as allcount')-
>where('name', 'like', '%' .$searchValue . '%')->count();
// Fetch records
$records = Employees::orderBy($columnName,$columnSortOrder)
->where('employees.name', 'like', '%' .$searchValue . '%')
->select('employees.*')
->skip($start)
->take($rowperpage)
->get();
$data_arr = array();
foreach($records as $record){
$id = $record->id;
$username = $record->username;
$name = $record->name;
$email = $record->email;
$data_arr[] = array(
"id" => $id,
"username" => $username,
"name" => $name,
"email" => $email
);
}
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordswithFilter,
"aaData" => $data_arr
);
return response()->json($response);
}
}
19. Buat folder karyawan di dalam folder resources dan View. Kemudian buat file
dengan nama index.blade.php dan isikan koding berikut.
<!DOCTYPE html>
<html>
<head>
<title>CRUD + SEED + FAKE </title>
<link rel="stylesheet" type="text/css"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.mi
n.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h3 class="text-center my-4">Menampilkan Data</h3>
<h5 class="text-center"><a
href="https://umri.ac.id">www.umri.ac.id</a></h5>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Nama</th>
<th>NISN</th>
<th>No HP</th>
<th>Email</th>
<th>Alamat</th>
<th>Created At</th>
<th>Updated At</th>
</tr>
</thead>
<tbody>
@foreach($siswas as $siswa)
<tr>
<td>{{$siswa->nama}}</td>
<td>{{$siswa->nisn}}</td>
<td>{{$siswa->no_hp}}</td>
<td>{{$siswa->email}}</td>
<td>{{$siswa->alamat}}</td>
<td>{{$siswa->created_at}}</td>
<td>{{$siswa->updated_at}}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.j
s"></script>
</body>
</html>
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
22.