Multiple Sorts (Orderby) in Laravel 5.8

min read

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);

 

x

Ủng hộ tôi bằng cách click vào quảng cáo. Để tôi có kinh phí tiếp tục phát triển Website!(Support me by clicking on the ad. Let me have the money to continue developing the Website!)