Day 22 #100DaysOfCode. Sử dụng Sort (orderby) cho nhiều cột dữ liệu
VD:http://127.0.0.1:8000/?sort=Name
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Category;
class TestController extends Controller
{
public function index(Request $request){
$sortColumn = $request->input('sort', 'name');
//or
$sortColumn = $request->sort;
return Category::orderBy($sortColumn)->paginate(20);
}
}
Ta có thể check "desc","asc" với cách sử dụng dưới đây, trước tiên ta cần cài đặt thư viện bên dưới đây, để có thể sử dụng được start_with
VD:http://127.0.0.1:8000/?sort=-Name
composer require laravel/helpers
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Category;
class TestController extends Controller
{
public function index(Request $request){
$sortColumn = $request->input('sort', 'name');
$sortDirection = starts_with($sortColumn, '-') ? 'desc' : 'asc';
$sortColumn = ltrim($sortColumn, '-');
return Category::orderBy($sortColumn, $sortDirection)
->paginate(20);
}
}
Nếu bạn có nhiều code để sort giống ví dụ dưới đây, thì ta cũng có cách như sau:
VD:http://127.0.0.1:8000/?sort=Name,-Keyword
$sorts = explode(',', $request->input('sort', ''));
$query = Category::query();
foreach ($sorts as $sortColumn) {
$sortDirection = starts_with($sortColumn, '-') ? 'desc' : 'asc';
$sortColumn = ltrim($sortColumn, '-');
$query->orderBy($sortColumn, $sortDirection);
}
// Return
return $query->paginate(20);