Phân trang trong Laravel với Raw SQL Queries

Nếu bạn cần custom paging với Raw SQL Queries ta sẽ dùng class LengthAwarePaginator để tạo phân trang.
Bước 1 : include các class sau:

use DB;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Input;
use Illuminate\Http\Request;

Bước 2: Tạo function trong controller:

public function arrayPaginator($array, $request)
    {
        $page    = Input::get('page', 1);
        $perPage = 10;//số record mỗi trang
        $offset  = ($page * $perPage) - $perPage;
 
        return new LengthAwarePaginator(array_slice($array, $offset, $perPage, true), count($array), $perPage, $page,
            ['path' => $request->url(), 'query' => $request->query()]);
    }

Bước 3 : Phân trang

public function paging(Request $request){
 $sql="select * from test";//query của bạn
 $result  = DB::select($sql);
 $pagings = $this->arrayPaginator($result, $request);
 return view('template', compact('pagings'));
}

Bước 4: Show phân trang trong template

{{ $pagings ->links() }}