Laravel frammework có một hệ thống phân trang được tích hợp với trình tạo truy vấn và Eloquent ORM, đồng thời cung cấp một hệ thống phân trang dễ sử dụng cho các kết quả cơ sở dữ liệu
Kết quả trình tạo truy vấn phân trang
Cách đơn giản nhất để phân trang kết quả cơ sở dữ liệu là sử dụng phương thức paginate[] trên trình tạo truy vấn hoặc truy vấn Eloquent.Phương thức paginate[] nhận một đối số. số mục bạn muốn hiển thị "trên mỗi trang". Sau đó, nó sẽ tự động đặt giới hạn và độ lệch phù hợp dựa trên trang hiện tại.
Trang hiện tại có kết quả phân trang được phát hiện bởi giá trị của đối số chuỗi truy vấn trên yêu cầu HTTP, được tự động chèn vào các liên kết phân trang.
- Ví dụ về bộ điều khiển hiển thị 20 mục trên mỗi trang
paginate[20]; return view['pages.index', ['pages'=>$pages]]; } }- Bạn có thể gọi paginate[] sau khi thiết lập các tham số khác trên truy vấn, chẳng hạn như mệnh đề where[] hoặc DB. thô[].
$pages = DB::table['table_name']->where['visits', '>', 100]->paginate[20]; $pages = DB::table['table_name']->select[DB::raw['*, DATE_FORMAT[dtreg, "%Y-%m-%d"] as dtreg']]->paginate[20];
Phân trang kết quả hùng hồn
Bạn cũng có thể phân trang các truy vấn Eloquent. Cú pháp gần giống với kết quả của trình tạo truy vấn phân trang.$users = App\User::paginate[20]; $users = User::where['votes', '>', 100]->paginate[20];
Hiển thị kết quả phân trang
Tập hợp kết quả với dữ liệu được trả về bởi phương thức paginate[] có thể được lặp lại dưới dạng một mảng, [ví dụ với foreach[]].Để hiển thị các liên kết phân trang được tạo tự động, hãy sử dụng phương thức $pages->links[] [Ở đây, $pages là đối tượng được phương thức paginate[] trả về].
Bạn có thể hiển thị kết quả và hiển thị các liên kết trang bằng mẫu Blade.
- Phương thức $pages->links[] trả về một@foreach[$pages as $page] {{ $page->id }} - {{ $page->title }} @endforeach
{{ $pages->links[] }}
- danh sách với các liên kết phân trang, tương thích với khung CSS Bootstrap
phương thức SimplePaginate[]
Nếu bạn chỉ cần hiển thị các liên kết "Tiếp theo" và "Trước đó" đơn giản trong chế độ xem phân trang của mình [không có liên kết cho mỗi số trang], bạn có thể sử dụng phương thức simplePaginate[] để thực hiện một truy vấn hiệu quả hơn.//with query builder $users = DB::table['users']->simplePaginate[20]; //or $users = DB::table['users']->where['votes', '>', 100]->simplePaginate[20]; //with Eloquent $users = User::simplePaginate[20]; //or $users = User::where['votes', '>', 100]->simplePaginate[20];
Tùy chỉnh URI của Paginator
Nếu bạn muốn trình phân trang tạo các liên kết như. //ví dụ. com/custom/url?page=N, sử dụng phương thức withPath[], với chuỗi "custom/url" làm đối số.Route::get['pages', function[]{ $pages = DB::table['table_name']->paginate[20]; $pages->withPath['custom/url']; // }];- Sau đó, sử dụng {{ $pages->links[] }} trong chế độ xem của bạn
Để nối các chuỗi vào mỗi liên kết phân trang, hãy sử dụng phương thức appends[].
- Ví dụ: để thêm "sort=votes" vào mỗi liên kết phân trang, bạn có thể sử dụng đoạn mã sau.
{{ $pages->appends[['sort' => 'votes']]->links[] }}
Nếu bạn muốn thêm một "đoạn hàm băm" vào các URL của trình phân trang, bạn có thể sử dụng phương thức fragment[].- Ví dụ: để thêm '#bip' vào cuối mỗi liên kết phân trang, hãy sử dụng mã sau.
{{ $pages->fragment['bip']->links[] }}
Phương thức phiên bản Paginator
Mỗi cá thể phân trang [được trả về bởi phương thức paginate[]] cung cấp thông tin phân trang bổ sung thông qua các phương thức sau- count[] - trả về số lượng mục trong tập kết quả hiện tại
- currentPage[] - trả về số chỉ mục của trang hiện tại
- firstItem[] - số chỉ mục của mục đầu tiên trong trang hiện tại
- hasMorePages[] - Đúng nếu có trang tiếp theo, ngược lại Sai
- lastItem[] - số chỉ mục của mục cuối cùng trong trang hiện tại
- lastPage[] - trả về số chỉ mục của trang cuối cùng [Không khả dụng khi sử dụng SimplePaginate[]]
- nextPageUrl[] - URL của trang tiếp theo. NULL nếu không có trang tiếp theo
- perPage[] - số mục trên mỗi trang
- trướcPageUrl[] - URL của trang trước. NULL nếu không có trang trước
- tổng [] - tổng số mục [Không khả dụng khi sử dụng SimplePaginate []]
- url[$nr] - URL của trang phân trang có chỉ mục là $nr
Đối tượng kết quả phân trang dưới dạng JSON
Để trả về kết quả của phương thức paginate[] ở định dạng JSON, bạn có thể sử dụng phương thức toJson[].public function index[]{ $pages = DB::table['table_name']->paginate[15]; return $pages->toJson[]; }JSON từ trình phân trang sẽ bao gồm thông tin meta như tổng số, trang hiện tại, trang cuối cùng, v.v.
Các đối tượng kết quả thực tế sẽ có sẵn thông qua khóa "dữ liệu" trong mảng JSON.
- Đoạn mã trên sẽ trả về một JSON như thế này.
{ "total": 50, "per_page": 15, "current_page": 1, "last_page": 4, "next_page_url": "//coursesweb.net?page=2", "prev_page_url": null, "from": 1, "to": 15, "data":[ { // Result Object of first item }, { // Result Object of second item } ] }
Tùy chỉnh chế độ xem liên kết phân trang
Theo mặc định, mã HTML được trả về với các liên kết phân trang tương thích với khung CSS Bootstrap.Để xác định mã HTML của riêng bạn cho các liên kết này, hãy tạo tệp xem. tài nguyên/lượt xem/phân trang/mặc định. lưỡi. php bằng mã phân trang tùy chỉnh và chuyển tên chế độ xem ['phân trang. default'] làm đối số đầu tiên cho phương thức links[].
- Ví dụ: đây là chế độ xem phân trang mặc định của Laravel.
@if[$paginator->hasPages[]]
-
{{-- Previous Page Link --}}
@if[$paginator->onFirstPage[]]
- « @else
- « @endif {{-- Pagination Elements --}} @foreach[$elements as $element] {{-- "Three Dots" Separator --}} @if[is_string[$element]]
- {{ $element }} @endif {{-- Array Of Links --}} @if[is_array[$element]] @foreach[$element as $page => $url] @if[$page == $paginator->currentPage[]]
- {{ $page }} @else
- {{ $page }} @endif @endforeach @endif @endforeach {{-- Next Page Link --}} @if[$paginator->hasMorePages[]]
- » @else
- » @endif
- Sau đó, hiển thị các liên kết phân trang bằng mã này.
{{$results->links['phân trang. mặc định']}}
Bạn cũng có thể chuyển dữ liệu đến chế độ xem phân trang{{$results->links['phân trang. mặc định', ['tên'=>$value]]}}
Một cách khác để tùy chỉnh chế độ xem phân trang là xuất chúng sang thư mục resource/views/vendor/ bằng cách sử dụng nhà cung cấp. xuất bản lệnh
nhà cung cấp thủ công php. xuất bản --tag=laravel-pagination
- "Mặc định đơn giản. lưỡi. php" dành cho các liên kết phân trang được trả về bởi phương thức simplePaginate[].
- Tài liệu. Laravel - Cơ sở dữ liệu. phân trang