yajra / laravel-datatables

jQuery DataTables API for Laravel
https://yajrabox.com/docs/laravel-datatables
MIT License
4.74k stars 862 forks source link

server-side + YADCF (data_range filter does not display any data) #2372

Closed phuthoma closed 4 years ago

phuthoma commented 4 years ago

I'm using Datatables in server-side mode with custom paging, ordering and searching - I'm just passing the results based on data sent by DataTables to server at each draw - so I'm not loading the entire table.

YADCF text filters works fine, but data_range filters don't and I don't know how to make them work.

Here's my controller code (I'm using Laravel 5.5.48):

public function injectQuery($query, $request, $columns) {
    if ($request['columns'][7]['search']['value'] != null) {
        $date = $request['columns'][7]['search']['value'];
        $date = explode('-yadcf_delim-', $date);
        $min_date = $date[0];

        if ($date && sizeof($date) > 1) {
            $max_date = $date[1];
        }

        if ($min_date)
            $query->whereDate($request['columns'][7]['name'], '>=', $min_date); 

        if ($max_date)
            $query->whereDate($request['columns'][7]['name'], '<=', $max_date); 
    }

    return $query;   
}

public function getDataTablesJsonActivities(Request $request) { 
    $query = Activity::query();  
    $columns = $request['columns'];

    return DataTables::of($query)     
        ->filter(function($query) use ($columns, $request) {
            $query = $this->injectQuery($query, $request, $columns);
        }, true)
        ->toJson();
}

Laravel query result seems to be OK, but no data is populated to Datatables. Here are some videos for more details: https://streamable.com/pjz41s https://streamable.com/ibyljl

Perhaps there is way to disable YADCF filtering for this column?

System details

Originally posted by @phuthoma in https://github.com/yajra/laravel-datatables/issues/463#issuecomment-617059794

phuthoma commented 4 years ago

The problem seems to be caused by YADCF, which is sending it's date value (with custom delimiter) to query bindings:

json

Yajra, do you have any idea how to fix it?

phuthoma commented 4 years ago

Using filterColumn() method solves this problem.