Bạn đã sử dụng Laravel Pagination với kết quả Eloquent. Đôi khi chúng ta phải phân trang trong Laravel trên các mảng đối tượng tùy chỉnh. Trong hướng dẫn này, chúng ta sẽ xem cách thực hiện phân trang thủ công Laravel
Ở đây chúng ta sẽ sử dụng lớp LengthAwarePaginator của Laravel để tạo phân trang tùy chỉnh trong Laravel
Đây là mã để triển khai Phân trang tùy chỉnh trong Laravel
// Trong Bộ điều khiển
slice[[$currentPage * $perPage] - $perPage, $perPage]->all[]; // Create our paginator and pass it to the view $paginatedproducts= new LengthAwarePaginator[$currentPageproducts , count[$productCollection], $perPage]; // set url path for generted links $paginatedproducts->setPath[$request->url[]]; return view['products_view', ['products' => $paginatedproducts]]; } }
cũng đọc. Phân trang Laravel với Ajax
// Theo quan điểm của bạn
Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
// Trong các tuyến đường của bạn
Route::get['products','ProductsController@items'];
Trong hướng dẫn này, chúng ta sẽ tạo một đối tượng bộ sưu tập tùy chỉnh với các mảng và tạo phân trang bằng cách sử dụng Laravel eloquent
liên kết
https. //www. giải pháp của nó. com/post/laravel-6-paginate-with-collection-or-arrayexample. html
NHẬN CÁC KHÓA HỌC LẬP TRÌNH MIỄN PHÍ
Nhận các hướng dẫn & quà tặng hữu ích về Laravel vào hộp thư đến của bạn
Bài đăng này được gửi bởi các thành viên của chúng tôi. Gửi bài mới
Chủ đề. PHP Laravel
Thẻ. Hướng dẫn Laravel 6
Trong các khuôn khổ khác, phân trang có thể rất đau đớn. Trình phân trang của Laravel được tích hợp với trình tạo truy vấn và Eloquent ORM và cung cấp khả năng phân trang thuận tiện, dễ sử dụng cho các kết quả cơ sở dữ liệu ngay lập tức. HTML được tạo bởi trình phân trang tương thích với khung CSS Bootstrap
Sử dụng cơ bản
Kết quả trình tạo truy vấn phân trang
Có một số cách để phân trang các mục. Đơn giản nhất là sử dụng phương pháp
$users = DB::table['users']->simplePaginate[15];
6 trên trình tạo truy vấn hoặc truy vấn Eloquent. Phương pháp $users = DB::table['users']->simplePaginate[15];
6 tự động đảm nhiệm việc đặt giới hạn và độ lệch phù hợp dựa trên trang hiện tại đang được người dùng xem. Theo mặc định, trang hiện tại được phát hiện bởi giá trị của đối số chuỗi truy vấn $users = DB::table['users']->simplePaginate[15];
8 trên yêu cầu HTTP. Giá trị này được Laravel tự động phát hiện và cũng được tự động chèn vào các liên kết do trình phân trang tạo raTrong ví dụ này, đối số duy nhất được truyền cho phương thức
$users = DB::table['users']->simplePaginate[15];
6 là số mục bạn muốn hiển thị "trên mỗi trang". Trong trường hợp này, hãy xác định rằng chúng tôi muốn hiển thị $users = App\User::paginate[15];
0 mục trên mỗi trang________số 8{note} Hiện tại, Laravel không thể thực thi các thao tác phân trang sử dụng câu lệnh
1 một cách hiệu quả. Nếu bạn cần sử dụng
$users = App\User::paginate[15];
1 với tập kết quả được phân trang, bạn nên truy vấn cơ sở dữ liệu và tạo trình phân trang theo cách thủ công
$users = App\User::paginate[15];
"Phân trang đơn giản"
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, bạn có thể sử dụng phương pháp
$users = App\User::paginate[15];
3 để thực hiện truy vấn hiệu quả hơn. Điều này rất hữu ích cho các tập dữ liệu lớn khi bạn không cần hiển thị liên kết cho từng số trang khi hiển thị chế độ xem của mình$users = DB::table['users']->simplePaginate[15];
Phân trang kết quả hùng biện
Bạn cũng có thể phân trang các truy vấn Eloquent. Trong ví dụ này, chúng tôi sẽ phân trang mô hình
$users = App\User::paginate[15];
4 với $users = App\User::paginate[15];
0 mục trên mỗi trang. Như bạn có thể thấy, 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[15];
Bạn có thể gọi
$users = DB::table['users']->simplePaginate[15];
6 sau khi đặt các ràng buộc khác cho truy vấn, chẳng hạn như mệnh đề $users = App\User::paginate[15];
7Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
8Bạn cũng có thể sử dụng phương pháp
$users = App\User::paginate[15];
3 khi phân trang các mô hình EloquentRoute::get['products','ProductsController@items'];0
Tạo thủ công một Paginator
Đôi khi bạn có thể muốn tạo một phiên bản phân trang theo cách thủ công, chuyển cho nó một mảng các mục. Bạn có thể làm như vậy bằng cách tạo phiên bản
$users = App\User::paginate[15];
9 hoặc Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
80, tùy thuộc vào nhu cầu của bạnLớp
Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
81 không cần biết tổng số mục trong tập kết quả; .Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
82 chấp nhận hầu hết các đối số giống nhưProducts List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
81;Nói cách khác,
Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
$users = App\User::paginate[15];
3 trên trình tạo truy vấn và Eloquent, trong khi Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
82 tương ứng với phương thức$users = DB::table['users']->simplePaginate[15];
6{lưu ý} Khi tạo phiên bản trình đánh trang theo cách thủ công, bạn nên "cắt" mảng kết quả mà bạn chuyển đến trình trang theo cách thủ công. Nếu bạn không chắc chắn cách thực hiện việc này, hãy xem hàm array_slice PHP
Hiển thị kết quả phân trang
Khi gọi phương thức
$users = DB::table['users']->simplePaginate[15];
6, bạn sẽ nhận được một thể hiện của Products List
-
@foreach [$products as $product]
- {{ $product }} @endforeach
{{ $products->links[] }}
80. Khi gọi phương thức$users = App\User::paginate[15];
3, bạn sẽ nhận được một thể hiện của $users = App\User::paginate[15];
9. Các đối tượng này cung cấp một số phương thức mô tả tập kết quả. Ngoài các phương thức trợ giúp này, các thể hiện của trình phân trang là các trình vòng lặp và có thể được lặp dưới dạng một mảng. Vì vậy, khi bạn đã truy xuất kết quả, bạn có thể hiển thị kết quả và hiển thị các liên kết trang bằng BladePhương thức
Route::get['products','ProductsController@items'];02 sẽ hiển thị các liên kết đến phần còn lại của các trang trong tập hợp kết quả. Mỗi liên kết này sẽ chứa biến chuỗi truy vấn
$users = DB::table['users']->simplePaginate[15];
8 phù hợp. Hãy nhớ rằng, HTML được tạo bởi phương thức Route::get['products','ProductsController@items'];02 tương thích với khung CSS Bootstrap
Tùy chỉnh URI của Paginator
Phương thức
Route::get['products','ProductsController@items'];05 cho phép bạn tùy chỉnh URI được sử dụng bởi trình phân trang khi tạo liên kết. Ví dụ: nếu bạn muốn trình phân trang tạo các liên kết như
Route::get['products','ProductsController@items'];06, bạn nên chuyển
Route::get['products','ProductsController@items'];07 cho phương thức
Route::get['products','ProductsController@items'];05
$users = DB::table['users']->simplePaginate[15];
1Nối vào liên kết phân trang
Bạn có thể thêm vào chuỗi truy vấn của các liên kết phân trang bằng phương pháp
Route::get['products','ProductsController@items'];09. Ví dụ: để thêm
$users = DB::table['users']->simplePaginate[15];
10 vào mỗi liên kết phân trang, bạn nên thực hiện lệnh gọi sau tới Route::get['products','ProductsController@items'];09
$users = DB::table['users']->simplePaginate[15];
5Nếu bạn muốn nối tất cả các giá trị chuỗi truy vấn hiện tại vào các liên kết phân trang, bạn có thể sử dụng phương thức
$users = DB::table['users']->simplePaginate[15];
12$users = DB::table['users']->simplePaginate[15];
7Nếu bạn muốn thêm một "đoạn 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
$users = DB::table['users']->simplePaginate[15];
13. Ví dụ: để thêm $users = DB::table['users']->simplePaginate[15];
14 vào cuối mỗi liên kết phân trang, hãy gọi phương thức $users = DB::table['users']->simplePaginate[15];
13 như sau$users = DB::table['users']->simplePaginate[15];
1Điều chỉnh cửa sổ liên kết phân trang
Bạn có thể kiểm soát số lượng liên kết bổ sung được hiển thị ở mỗi bên của "cửa sổ" URL của trình phân trang. Theo mặc định, ba liên kết được hiển thị ở mỗi bên của liên kết trang chính. Tuy nhiên, bạn có thể kiểm soát số này bằng phương pháp
$users = DB::table['users']->simplePaginate[15];
16$users = DB::table['users']->simplePaginate[15];
3Chuyển đổi kết quả thành JSON
Các lớp kết quả phân trang của Laravel triển khai hợp đồng Giao diện
$users = DB::table['users']->simplePaginate[15];
17 và hiển thị phương thức $users = DB::table['users']->simplePaginate[15];
18, do đó rất dễ dàng chuyển đổi kết quả phân trang của bạn thành JSON. Bạn cũng có thể chuyển đổi một thể hiện của trình phân trang thành JSON bằng cách trả về nó từ một tuyến đường hoặc hành động của bộ điều khiển$users = DB::table['users']->simplePaginate[15];
0JSON từ trình phân trang sẽ bao gồm thông tin meta như
$users = DB::table['users']->simplePaginate[15];
19, $users = DB::table['users']->simplePaginate[15];
50, $users = DB::table['users']->simplePaginate[15];
51, v.v. Các đối tượng kết quả thực tế sẽ có sẵn thông qua khóa $users = DB::table['users']->simplePaginate[15];
52 trong mảng JSON. Đây là một ví dụ về JSON được tạo bằng cách trả về một phiên bản trình phân trang từ một tuyến đường$users = DB::table['users']->simplePaginate[15];
1Tùy chỉnh Chế độ xem Phân trang
Theo mặc định, các chế độ xem được hiển thị để hiển thị các liên kết phân trang tương thích với khung CSS Bootstrap. Tuy nhiên, nếu bạn không sử dụng Bootstrap, bạn có thể tự do xác định chế độ xem của riêng mình để hiển thị các liên kết này. Khi gọi phương thức
Route::get['products','ProductsController@items'];02 trên phiên bản paginator, hãy chuyển tên chế độ xem làm đối số đầu tiên cho phương thức
$users = DB::table['users']->simplePaginate[15];
2Tuy nhiên, cách dễ nhất để tùy chỉnh chế độ xem phân trang là xuất chúng sang thư mục
$users = DB::table['users']->simplePaginate[15];
54 của bạn bằng cách sử dụng lệnh $users = DB::table['users']->simplePaginate[15];
55$users = DB::table['users']->simplePaginate[15];
3Lệnh này sẽ đặt các khung nhìn trong thư mục
$users = DB::table['users']->simplePaginate[15];
56. Tệp $users = DB::table['users']->simplePaginate[15];
57 trong thư mục này tương ứng với chế độ xem phân trang mặc định. Bạn có thể chỉnh sửa tệp này để sửa đổi HTML phân trangNếu bạn muốn chỉ định một tệp khác làm chế độ xem phân trang mặc định, bạn có thể sử dụng các phương thức
$users = DB::table['users']->simplePaginate[15];
58 và $users = DB::table['users']->simplePaginate[15];
59 của trình phân trang trong $users = DB::table['users']->simplePaginate[15];
70 của mình$users = DB::table['users']->simplePaginate[15];
4Sử dụng Tailwind
Laravel bao gồm các chế độ xem phân trang được xây dựng bằng Tailwind CSS. Để sử dụng các chế độ xem này thay vì các chế độ xem Bootstrap mặc định, bạn có thể gọi phương thức
$users = DB::table['users']->simplePaginate[15];
71 của trình phân trang trong $users = DB::table['users']->simplePaginate[15];
70 của mình