Datatable load data paging from server side in Laravel

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;
}

 

Bình luận
Zalo