Laravel Nova: Setting a default sort order support multi columns

Laravel Nova: Setup a default sort order for resource which support multi columns

  • Put the code bellow into Laravel Nova resource class

  • We are override indexQuery method of Resource parrent class.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* Default Sort Columns variable
*
* @var array
*/
public static $defaultSort = [
'id' => 'asc',
'name' => 'desc'
];

/**
* Build an "index" query for the given resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
{
if (static::$defaultSort && empty($request->get('orderBy'))) {
$query->getQuery()->orders = [];
foreach (static::$defaultSort as $field => $order) {
$query->orderBy($field, $order);
}
}
return $query;
}