Quay lại

Quick tip - Sử dụng lightweight pagination trong Laravel Chuyên mục PHP và Laravel    2023-09-09    1k Lượt xem    21 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Quick tip - Sử dụng lightweight pagination trong Laravel

Nếu bạn muốn phân trang các bản ghi cơ sở dữ liệu trong Laravel, bạn có thể sử dụng phương thức paginate trên query builder hoặc Eloquent query.

Vì vậy, ví dụ: Nếu bạn muốn phân trang một truy vấn trên bảng users cho năm bản ghi trên mỗi trang, bạn có thể sử dụng phương pháp phân trang như sau:

$users = DB::table('users')->paginate(5);

Đây là những gì bạn nhận được nếu bạn dd() đầu ra:

Như bạn có thể biết, nó có một số tham số như total (tổng số bản ghi), lastPagecurrentPage, v.v. để bạn có thể sử dụng thông tin này để hiển thị các liên kết phân trang.

Nhưng ở đây, nếu bạn để ý, paginate() đưa ra tổng số bản ghi mà truy vấn trả về và đó là một vấn đề. Hoạt động này khá expensive nếu bạn đang phân trang một tập hợp lớn các bản ghi. Vì vậy, trừ khi bạn cần tổng số bản ghi và số trang, bạn nên sử dụng thứ khác. Một cái gì đó nhẹ hơn nhiều đó chính là simplePaginate().

simplePaginate()

Như mình đã đề cập, trong trường hợp bạn không cần tổng số bản ghi và số trang, bạn có thể sử dụng simplePaginate().

Phương thức này khác với paginate() ở chỗ nó không tính số lượng bản ghi và tổng số trang mà truy vấn trả về. Và nhờ đó, bạn có thể tối ưu hóa ở mặt trước phân trang.

Vì vậy, nếu chúng ta muốn viết lại truy vấn trước đó bằng simplePaginate(), bạn có thể làm như vậy.

$users = DB::table('users')->simplePaginate(5);

Đây là những gì bạn nhận được nếu bạn dd() đầu ra:

Như bạn có thể thấy, đối tượng được trả về sẽ bị loại bỏ chỉ với các tham số cần thiết như hasMore (cho biết rằng có các bản ghi có sẵn trên trang tiếp theo) và currentPage.

Trường hợp sử dụng

Cách tiếp cận này đặc biệt hữu ích khi bạn muốn triển khai tính năng cuộn vô hạn mà bạn không thực sự cần tổng số bản ghi hoặc số lượng trang ở đó.

Hoặc trong trường hợp bạn chỉ cần hiển thị các liên kết “next” và “previous” mà không hiển thị liên kết của mỗi trang.

 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday