1. Install library laravel-datatables
composer require yajra/laravel-datatables
2. Javascript, set serverSide = true on DataTable
var table = $('#datatable').DataTable({
serverSide: true,
"ajax": {
url: "{{route("order.indexData")}}",
data: function (d) {
d.from_date = $('#fromDate').val();
d.to_date =$('#toDate').val();
}
},
"columns": [
{"data": "id"},
{"data": "customer_name"},
{"data": "money"}
],
columnDefs: [
{className: "dt-body-center", targets: [2]},
{searchable: false, targets: 2}
]
});
If serverSide = true. Data is paginated on server side. Viewing a page only loads data from the current page.
If serverSide = false. Data is load all. Paginated is only on client side.
3. Function get data in controller
public function indexData(Request $request) { $fromDate = $request->from_date ?? date("Y-m-d"); $toDate = $request->to_date ?? date("Y-m-d"); $data = Order::where('order_date', '>=', $fromDate)->where('order_date', '<=', $toDate) ->select(["id", "customer_name", "money"]); $orders = DataTables::eloquent($data)->make(); return $orders; }