Database: Pagination
16478

# 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ượng LengthAwarePaginator, 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


  1. Khác
  2. ThreeJS
  3. Ubuntu/Linux
  4. HTML/CSS
  5. Git
  6. Amazon Web Services
  7. Javascript
  8. Docker
  9. Laravel

Bài viết liên quan


Database: Migrations

Database: Migrations

01.08.2024
Author: ADMIN
Laravel Migrations giúp bạn quản lý cơ sở dữ liệu dễ dàng bằng mã PHP. Hướng dẫn cách tạo, chỉnh sửa, rollback, reset, thêm hoặc xóa bảng và cột một cách nhanh chóng và hiệu quả.
Database: Seeding

Database: Seeding

01.08.2024
Author: ADMIN
Laravel Seeding giúp tự động tạo dữ liệu mẫu nhanh chóng. Tìm hiểu cách tạo, chạy seeder, kết hợp factory, và sử dụng trong production một cách an toàn! 🚀

Bài viết khác

Routing

Routing

01.08.2024
Author: ADMIN
Hướng dẫn chi tiết về Basic Routing trong Laravel, từ cách định nghĩa route, sử dụng middleware, route caching đến route naming giúp tối ưu hóa ứng dụng.
Blade Basics

Blade Basics

01.08.2024
Author: ADMIN
Khám phá Blade trong Laravel: từ if-else, loops, kế thừa layout đến include sub-views. Giúp code gọn gàng, dễ quản lý và bảo trì hơn!
9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

01.08.2024
Author: ADMIN
Khám phá 9 mẹo Blade giúp bạn viết code Laravel sạch, tối ưu và chuyên nghiệp hơn. Từ @forelse, @auth, @guest, đến format ngày, tối ưu SEO – tất cả trong một bài viết súc tích, dễ áp dụng!
Hiển thị giá trị trong Blade

Hiển thị giá trị trong Blade

01.08.2024
Author: ADMIN
Hướng dẫn hiển thị biến trong Laravel Blade: escape HTML tự động, hiển thị dữ liệu thô, giá trị mặc định và cách truy xuất mảng, đối tượng. Giúp bạn tối ưu hiển thị dữ liệu một cách an toàn!