diff --git a/src/QueryDataTable.php b/src/QueryDataTable.php index 083eeb64..6322157f 100644 --- a/src/QueryDataTable.php +++ b/src/QueryDataTable.php @@ -690,7 +690,11 @@ protected function getNullsLastSql($column, $direction) { $sql = $this->config->get('datatables.nulls_last_sql', '%s %s NULLS LAST'); - return sprintf($sql, $column, $direction); + return str_replace( + [':column', ':direction'], + [$column, $direction], + sprintf($sql, $column, $direction) + ); } /** diff --git a/src/config/datatables.php b/src/config/datatables.php index 9d8c4212..ed2e36f7 100644 --- a/src/config/datatables.php +++ b/src/config/datatables.php @@ -4,17 +4,17 @@ /* * DataTables search options. */ - 'search' => [ + 'search' => [ /* * Smart search will enclose search keyword with wildcard string "%keyword%". * SQL: column LIKE "%keyword%" */ - 'smart' => true, + 'smart' => true, /* * Multi-term search will explode search keyword using spaces resulting into multiple term search. */ - 'multi_term' => true, + 'multi_term' => true, /* * Case insensitive will search the keyword in lower case format. @@ -26,29 +26,29 @@ * Wild card will add "%" in between every characters of the keyword. * SQL: column LIKE "%k%e%y%w%o%r%d%" */ - 'use_wildcards' => false, + 'use_wildcards' => false, /* * Perform a search which starts with the given keyword. * SQL: column LIKE "keyword%" */ - 'starts_with' => false, + 'starts_with' => false, ], /* * DataTables internal index id response column name. */ - 'index_column' => 'DT_RowIndex', + 'index_column' => 'DT_RowIndex', /* * List of available builders for DataTables. * This is where you can register your custom dataTables builder. */ - 'engines' => [ - 'eloquent' => \Yajra\DataTables\EloquentDataTable::class, - 'query' => \Yajra\DataTables\QueryDataTable::class, - 'collection' => \Yajra\DataTables\CollectionDataTable::class, - 'resource' => \Yajra\DataTables\ApiResourceDataTable::class, + 'engines' => [ + 'eloquent' => Yajra\DataTables\EloquentDataTable::class, + 'query' => Yajra\DataTables\QueryDataTable::class, + 'collection' => Yajra\DataTables\CollectionDataTable::class, + 'resource' => Yajra\DataTables\ApiResourceDataTable::class, ], /* @@ -56,7 +56,7 @@ * This is where you can override which engine a builder should use * Note, only change this if you know what you are doing! */ - 'builders' => [ + 'builders' => [ //Illuminate\Database\Eloquent\Relations\Relation::class => 'eloquent', //Illuminate\Database\Eloquent\Builder::class => 'eloquent', //Illuminate\Database\Query\Builder::class => 'query', @@ -64,10 +64,10 @@ ], /* - * Nulls last sql pattern for Posgresql & Oracle. - * For MySQL, use '-%s %s' + * Nulls last sql pattern for PostgreSQL & Oracle. + * For MySQL, use 'CASE WHEN :column IS NULL THEN 1 ELSE 0 END, :column :direction' */ - 'nulls_last_sql' => '%s %s NULLS LAST', + 'nulls_last_sql' => ':column :direction NULLS LAST', /* * User friendly message to be displayed on user if error occurs. @@ -76,28 +76,28 @@ * 'throw' - Throws a \Yajra\DataTables\Exceptions\Exception. Use your custom error handler if needed. * 'custom message' - Any friendly message to be displayed to the user. You can also use translation key. */ - 'error' => env('DATATABLES_ERROR', null), + 'error' => env('DATATABLES_ERROR', null), /* * Default columns definition of dataTable utility functions. */ - 'columns' => [ + 'columns' => [ /* * List of columns hidden/removed on json response. */ - 'excess' => ['rn', 'row_num'], + 'excess' => ['rn', 'row_num'], /* * List of columns to be escaped. If set to *, all columns are escape. * Note: You can set the value to empty array to disable XSS protection. */ - 'escape' => '*', + 'escape' => '*', /* * List of columns that are allowed to display html content. * Note: Adding columns to list will make us available to XSS attacks. */ - 'raw' => ['action'], + 'raw' => ['action'], /* * List of columns are are forbidden from being searched/sorted. @@ -114,7 +114,7 @@ /* * JsonResponse header and options config. */ - 'json' => [ + 'json' => [ 'header' => [], 'options' => 0, ],