edit this page Ordering
Ordering can be setup by using the $orderable
variable in your repository. The $orderable
variable contains the names of the table columns that are used for ordering.
Also see Global Scopes under Scope for more Ordering magic.
<?php
namespace App\Repositories;
use Torann\LaravelRepository\Repository;
class UsersRepository extends Repository
{
/**
* Specify Model class name
*/
protected string $model = \App\User::class;
/**
* Orderable columns.
*/
protected array $orderable = [
'name',
'confirmed',
'user_role_id',
'created_at',
];
}
How this works in our controller:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Repositories\UserRepository;
class UsersController extends Controller
{
protected UserRepository $repository;
public function __construct(UserRepository $repository)
{
$this->repository = $repository;
}
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View
*/
public function index(Request $request)
{
$users = $this->repository
->orderBy($request->get('sort'), $request->get('dir'))
->paginate();
return view('users.index')->with([
'users' => $users,
]);
}
}
Masking Table Columns
To hide the true name of the table column, we simply create a key/value pair. Where the key is the name of the parameter the user sees and the value is the name of the table column.
<?php
namespace App\Repositories;
use Torann\LaravelRepository\Repository;
class UsersRepository extends Repository
{
/**
* Specify Model class name
*/
protected string $model = \App\User::class;
/**
* Orderable columns.
*/
protected array $orderable = [
'name',
'confirmed',
'role' => 'user_role_id',
'created_at',
];
}
Another benefit of doing this is that it allow us to sort by joined tables as well. Just simply prefix the column name with the table name.