
# Database: Pagination
Phân trang (pagination) là một kỹ thuật quan trọng để phân chia dữ liệu lớn thành các trang nhỏ hơn, giúp người dùng dễ dàng duyệt qua dữ liệu mà không phải tải toàn bộ dữ liệu cùng một lúc. Laravel cung cấp các phương pháp đơn giản để thực hiện phân trang với Eloquent và Query Builder.
1. Phân Trang Với Eloquent
Khi sử dụng Eloquent để truy vấn dữ liệu, bạn có thể sử dụng phương thức paginate
để phân trang kết quả. Ví dụ, giả sử bạn có một model Post
, bạn có thể phân trang các bài viết như sau:
// Lấy 10 bài viết mỗi trang
$posts = App\Models\Post::paginate(10);
// or
$users = DB::table('users')->paginate(10);
paginate($perPage)
: Phương thức này trả về một đối tượngLengthAwarePaginator
, chứa các bài viết cho trang hiện tại và thông tin phân trang.
Bạn có thể sử dụng biến $posts
trong view Blade để hiển thị dữ liệu và các liên kết phân trang:
@foreach ($posts as $post)
<div>{{ $post->title }}</div>
@endforeach
{{ $posts->links() }}
2. Phân Trang Tuỳ Chỉnh
Bạn có thể tùy chỉnh phân trang bằng cách thay đổi số lượng bản ghi trên mỗi trang hoặc thêm các tham số khác:
// Lấy 15 bản ghi mỗi trang và tùy chỉnh các tham số khác
$posts = App\Models\Post::paginate(15, ['*'], 'page', $currentPage);
$currentPage
: Bạn có thể chỉ định số trang hiện tại nếu cần thiết.
# Tùy Chỉnh URL Phân Trang
Laravel cho phép bạn tùy chỉnh URL phân trang để phù hợp với các yêu cầu hoặc cấu trúc URL của ứng dụng. Đây là các cách bạn có thể thực hiện việc này:
1. Tùy Chỉnh Tham Số URL
Bạn có thể tùy chỉnh các tham số của URL phân trang bằng cách sử dụng phương thức appends
để thêm các tham số bổ sung vào các liên kết phân trang. Ví dụ, nếu bạn muốn giữ lại các tham số truy vấn hiện tại trong URL phân trang:
$posts = App\Models\Post::paginate(10)->appends(['sort' => 'desc']);
appends($array)
: Thêm các tham số bổ sung vào URL phân trang.
Ví dụ trong view Blade:
@foreach ($posts as $post)
<div>{{ $post->title }}</div>
@endforeach
{{ $posts->appends(['sort' => 'desc'])->links() }}
2. Tùy Chỉnh Đường Dẫn Phân Trang
$users->withPath('/admin/users');
withPath('/admin/users')
: Phương thức này được sử dụng để tùy chỉnh đường dẫn phân trang. Thay vì sử dụng đường dẫn mặc định, bạn có thể chỉ định một đường dẫn khác cho các liên kết phân trang.
# Các Phương Thức Của Paginator
/ LengthAwarePaginator
Khi làm việc với phân trang trong Laravel, bạn sẽ thường xuyên sử dụng các phương thức của lớp Paginator
hoặc LengthAwarePaginator
. Dưới đây là các phương thức chính và cách sử dụng chúng:
$users = User::paginate(15);
// Số mục trên trang hiện tại
$count = $users->count();
// Số trang hiện tại
$currentPage = $users->currentPage();
// Số thứ tự của mục đầu tiên
$firstItem = $users->firstItem();
// Các tùy chọn phân trang
$options = $users->getOptions();
// Dãy URL từ trang 1 đến trang 5
$urls = $users->getUrlRange(1, 5);
// Kiểm tra có nhiều trang không
$hasPages = $users->hasPages();
// Kiểm tra có còn trang kế tiếp không
$hasMore = $users->hasMorePages();
// Các mục trên trang hiện tại
$items = $users->items();
// Số thứ tự của mục cuối cùng
$lastItem = $users->lastItem();
// Số trang cuối cùng
$lastPage = $users->lastPage();
// URL của trang kế tiếp
$nextPageUrl = $users->nextPageUrl();
// Kiểm tra có đang ở trang đầu tiên không
$onFirstPage = $users->onFirstPage();
// Số lượng mục trên mỗi trang
$perPage = $users->perPage();
// URL của trang trước đó
$previousPageUrl = $users->previousPageUrl();
// Tổng số mục
$total = $users->total();
// URL của trang số 2
$url = $users->url(2);
// Biến truy vấn để lưu trữ số trang
$pageName = $users->getPageName();
// Đặt tên biến truy vấn để lưu trữ số trang
$users->setPageName('page');
// Chuyển đổi từng mục để chỉ lấy tên người dùng return $user->name;
$transformedUsers = $users->through(function ($user) {
return $user->name;
});
# Các Phương Thức Của CursorPaginator
Method | Description |
$paginator->count()
|
Số mục trên trang hiện tại
|
$paginator->cursor()
|
Đối tượng con trỏ hiện tại
|
$paginator->getOptions()
|
Các tùy chọn phân trang
|
$paginator->hasPages()
|
Kiểm tra có nhiều trang không
|
$paginator->hasMorePages()
|
Kiểm tra có còn mục nào không
|
$paginator->getCursorName()
|
Biến truy vấn để lưu trữ con trỏ
|
$paginator->items()
|
Các mục trên trang hiện tại
|
$paginator->nextCursor()
|
Con trỏ cho tập hợp mục tiếp theo
|
$paginator->nextPageUrl()
|
URL của trang kế tiếp
|
$paginator->onFirstPage()
|
Kiểm tra có đang ở trang đầu tiên không
|
$paginator->onLastPage()
|
Kiểm tra có đang ở trang cuối cùng không
|
$paginator->perPage()
|
Số lượng mục trên mỗi trang
|
$paginator->previousCursor()
|
Con trỏ cho tập hợp mục trước đó
|
$paginator->previousPageUrl()
|
URL của trang trước đó
|
$paginator->setCursorName()
|
Đặt tên biến truy vấn để lưu trữ con trỏ
|
$paginator->url($cursor)
|
URL cho con trỏ cụ thể
|
Danh mục
Bài viết liên quan

Database: Migrations
Author: | ADMIN |
---|

Database: Seeding
Author: | ADMIN |
---|
Bài viết khác

Blade Basics
Author: | ADMIN |
---|

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel
Author: | ADMIN |
---|

Hiển thị giá trị trong Blade
Author: | ADMIN |
---|