28 lines
638 B
PHP
28 lines
638 B
PHP
<?php
|
|
|
|
namespace App\Http\Concerns;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
trait SortsQuery
|
|
{
|
|
/**
|
|
* @param array<int, string> $allowed
|
|
*/
|
|
protected function sortedQuery(Builder $query, array $allowed, string $default, string $defaultDir = 'asc'): Builder
|
|
{
|
|
$sort = request()->input('sort', $default);
|
|
$dir = request()->input('direction', $defaultDir);
|
|
|
|
if (! in_array($sort, $allowed, true)) {
|
|
$sort = $default;
|
|
}
|
|
|
|
if (! in_array($dir, ['asc', 'desc'], true)) {
|
|
$dir = $defaultDir;
|
|
}
|
|
|
|
return $query->orderBy($sort, $dir);
|
|
}
|
|
}
|