[Video] Hướng dẫn tim hiểu Pagination + model qua ví dụ quản lý sinh viên - Lập trình Laravel
Mở bài
Trong quá trình phát triển các ứng dụng web bằng Laravel, việc xử lý dữ liệu và hiển thị danh sách theo từng trang (phân trang – Pagination) là một yêu cầu phổ biến và vô cùng quan trọng. Khi dữ liệu trong hệ thống ngày càng lớn, hiển thị tất cả các bản ghi trên một trang không chỉ khiến giao diện trở nên rối mắt mà còn làm giảm hiệu suất xử lý của ứng dụng.
Laravel cung cấp cho lập trình viên một cơ chế Pagination mạnh mẽ và linh hoạt, kết hợp cùng Model (Eloquent ORM) giúp việc quản lý, truy xuất và hiển thị dữ liệu trở nên cực kỳ đơn giản và hiệu quả.
Trong bài viết này, chúng ta sẽ cùng xây dựng ví dụ thực tế về quản lý sinh viên, qua đó tìm hiểu sâu hơn về Pagination và Model trong Laravel. Từ việc tạo cấu trúc cơ sở dữ liệu, định nghĩa Model, truy xuất dữ liệu, cho đến hiển thị danh sách sinh viên có phân trang — tất cả sẽ được giải thích rõ ràng, dễ hiểu, kèm theo ví dụ cụ thể.
Bài viết này đặc biệt hữu ích cho:
-
Sinh viên, người mới học Laravel.
-
Lập trình viên muốn hiểu rõ cách hoạt động của Pagination trong Laravel.
-
Những ai đang xây dựng hệ thống quản lý dữ liệu có danh sách hiển thị lớn.
Hãy cùng bắt đầu hành trình khám phá Pagination và Model trong Laravel qua ví dụ ứng dụng quản lý sinh viên nhé!
Tổng quan về Pagination trong Laravel
Pagination là gì?
Pagination (Phân trang) là kỹ thuật chia nhỏ dữ liệu thành nhiều trang nhỏ hơn để hiển thị. Khi bạn có hàng trăm hoặc hàng nghìn bản ghi trong cơ sở dữ liệu, việc phân trang giúp:
-
Giảm tải cho server và trình duyệt khi hiển thị dữ liệu.
-
Tăng tốc độ tải trang.
-
Cải thiện trải nghiệm người dùng (UX).
-
Giúp bố cục trang web gọn gàng, dễ theo dõi hơn.
Laravel cung cấp nhiều phương thức để phân trang dữ liệu, chẳng hạn như:
-
paginate()– Phân trang tự động, hỗ trợ hiển thị link điều hướng. -
simplePaginate()– Phân trang đơn giản, phù hợp cho dữ liệu lớn. -
cursorPaginate()– Phân trang hiệu quả hơn với dữ liệu động, tránh lỗi trùng lặp khi thêm mới dữ liệu.
Ví dụ:
Lệnh này sẽ tự động lấy 10 sinh viên mỗi trang và hiển thị link điều hướng như “Previous”, “Next”, hoặc số trang.
Cấu trúc cơ sở dữ liệu ví dụ: Quản lý sinh viên
Trước khi triển khai Pagination, ta cần có dữ liệu để hiển thị. Giả sử bạn xây dựng một ứng dụng quản lý sinh viên với bảng students có cấu trúc như sau:
| Trường | Kiểu dữ liệu | Mô tả |
|---|---|---|
| id | Auto Increment | Mã sinh viên |
| name | string | Họ và tên sinh viên |
| string | Địa chỉ email | |
| phone | string | Số điện thoại |
| birthday | date | Ngày sinh |
| address | string | Địa chỉ |
| created_at | timestamp | Ngày tạo |
| updated_at | timestamp | Ngày cập nhật |
Tạo migration trong Laravel:
Sau đó, định nghĩa bảng trong file migration:
Chạy lệnh:
Bây giờ, bảng students đã sẵn sàng để sử dụng.
Tạo Model và Seeder dữ liệu
Tạo Model Student
Trong file app/Models/Student.php, ta khai báo:
Tạo dữ liệu mẫu (Seeder)
Trong file database/seeders/StudentSeeder.php:
Sau đó tạo factory:
Khai báo dữ liệu mẫu trong database/factories/StudentFactory.php:
Chạy seeder:
Vậy là bạn đã có 100 sinh viên mẫu trong cơ sở dữ liệu để kiểm tra tính năng phân trang.
Hiển thị danh sách sinh viên có phân trang
Controller
Tạo controller để quản lý sinh viên:
Trong StudentController, thêm phương thức:
Route
Thêm route trong web.php:
Giao diện hiển thị (Blade Template)
Tạo file resources/views/students/index.blade.php:
Laravel sẽ tự động tạo thanh điều hướng phân trang đẹp mắt và tiện dụng.
Tuỳ chỉnh phân trang trong Laravel
Laravel cho phép bạn dễ dàng tùy chỉnh giao diện và hành vi của Pagination:
1. Tùy chỉnh số bản ghi mỗi trang
=> Hiển thị 20 sinh viên mỗi trang.
2. Dùng simplePaginate()
Khi không cần tổng số trang, bạn có thể dùng:
=> Tối ưu hiệu suất cho dữ liệu lớn.
3. Thêm điều kiện lọc khi phân trang
=> Hiển thị danh sách sinh viên có tên chứa “Nguyen”.
4. Thay đổi giao diện Pagination
Laravel sử dụng Bootstrap mặc định. Nếu bạn muốn dùng Tailwind:
Hoặc dùng Bootstrap:
Phân trang kết hợp với tìm kiếm (Search + Pagination)
Trong ứng dụng thực tế, ta thường muốn kết hợp phân trang và tìm kiếm. Ví dụ:
Trong view:
Laravel sẽ tự động giữ nguyên query string khi chuyển trang (?keyword=...&page=2).
Một số lỗi thường gặp khi sử dụng Pagination
-
Không hiển thị link phân trang:
→ Kiểm tra xem có sử dụng{{ $students->links() }}trong Blade không. -
Không giữ từ khóa tìm kiếm khi chuyển trang:
→ Dùng$students->appends(request()->all())->links()để giữ tham số. -
Hiệu năng chậm khi dữ liệu lớn:
→ Sử dụngsimplePaginate()hoặccursorPaginate()để tối ưu. -
Sai số bản ghi hiển thị:
→ Kiểm tra lại giá trị truyền vàopaginate(n)có phù hợp hay không.
Lời khuyên khi làm việc với Pagination và Model
-
Luôn kết hợp với điều kiện lọc (where) để giảm tải dữ liệu.
-
Sử dụng Eager Loading (
with()) khi cần lấy dữ liệu liên kết (ví dụ lớp học, điểm số). -
Tối ưu SQL query bằng cách giới hạn cột cần thiết (
select()). -
Khi cần API Pagination, Laravel hỗ trợ
paginate()trả về JSON sẵn.
Ví dụ:
Kết luận
Qua bài viết này, bạn đã hiểu rõ cách kết hợp Model và Pagination trong Laravel thông qua ví dụ thực tế về ứng dụng quản lý sinh viên. Từ khâu tạo bảng dữ liệu, tạo Model, fake dữ liệu, cho đến hiển thị danh sách có phân trang, tất cả đều được Laravel hỗ trợ mạnh mẽ và trực quan.
Pagination không chỉ giúp nâng cao hiệu năng ứng dụng, mà còn tăng trải nghiệm người dùng đáng kể. Khi bạn nắm vững cách áp dụng và tùy chỉnh Pagination, bạn có thể triển khai nó trong hầu hết các hệ thống quản lý dữ liệu – từ quản lý sinh viên, sản phẩm, khách hàng cho đến bài viết blog.
Nếu bạn đang học Laravel, hãy thực hành ngay ví dụ này để hiểu sâu hơn về cách hoạt động của Pagination và Eloquent Model. Laravel không chỉ là framework — mà là một hệ sinh thái mạnh mẽ giúp bạn xây dựng ứng dụng web chuyên nghiệp, nhanh chóng và dễ bảo trì.
🚀 Hãy bắt đầu ngay hôm nay và tạo cho riêng bạn một ứng dụng quản lý sinh viên hoàn chỉnh với Pagination trong Laravel!