Mục Lục
Mục Lục
Hướng dẫn cài đặt môi trường [Bài Viết] Hướng dẫn cài composer [Bài Viết] Hướng dẫn tạo dự án Laravel đầu tay. [Bài Viết] Hướng dẫn cấu hình cơ sở dữ liệu và bật chức năng auth có sẵn trong Laravel [Bài Viết] Hướng dẫn cài theme Acacha AdminLTE cho Laravel [Bài Viết] Hướng dẫn tắt debug khi upload dự án laravel lên HOST Video Hướng dẫn cài đặt môi trường + tạo dự án + Tìm hiểu Route qua ví dụ - Lập trình Laravel Video Hướng dẫn cài đặt dự án Laravel + Cài đặt chức năng Auth (login + register) trong Laravel Tìm hiểu Route & View & Controller Video Tìm hiểu Route trong Laravel + Học lập trình laravel qua ví dụ Hello World, ax+b=0, Hiển thị danh sách sinh viên Video Tìm hiểu Route qua ví dụ quản lý sinh viên - Laravel Video Hướng dẫn tìm hiểu Route - Controller - View trong Laravel qua ví dụ Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Hello World trong Laravel Phần 1 Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Tính giai thừa trong Laravel Phần 2 Video Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ hiển thị danh sách sinh viên trong Laravel Phần 3 Tìm hiểu route + truyền dữ liệu từ controller tới view qua bài quản lý khách sạn- Lập trình Laravel Tìm hiểu route + truyền dữ liệu từ controller tới view qua bài quản lý sản phẩm - Lập trình Laravel Tìm hiểu Route - Controller - View trong Laravel Route: Giải phương trình bậc 2 (ax2 + bx + c = 0) bằng Laravel - Lập trình laravel BÀI TẬP LARAVEL CƠ BẢN - Lập Trình Laravel - Route → Controller → View QUẢN LÝ SINH VIÊN (KHÔNG DÙNG DATABASE) - Khóa học lập trình Laravel GET/POST trong Laravel Video Tìm hiểu GET/POST trong Laravel qua ví dụ nhập thông tin người dùng - Lập trình Laravel Quản lý sinh viên bằng Laravel - Lập trình Laravel Video Quản lý sinh viên bằng Laravel - Lập trình Laravel Layout - Blade Video Tìm hiểu Route - Blade (nhung css/js/photos) - cú pháp Blade - Xử lý GET/POST trong Laravel Video Hướng dẫn tìm hiểu layout trong Laravel - qua ví dụ tạo website tin tức - Lập Trình Laravel Bài Tập Học Layout thông qua clone website - Creative Theme Bootstrap Free - Lập trình Laravel Kết nối CSDL - Laravel Video Hướng dẫn tìm hiểu view, migration, seeder, db - laravel - Qua ví dụ quản lý sinh viên Video Học Laravel qua ví dụ thêm & hiển thị tài khoản người dung - DB::Insert - DB::get - Paginate - Khoá Học Laravel Tìm hiểu migration trong laravel - Lập trình laravel Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel Video - Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel Video Bài tập quản lý sách bằng Laravel - Full Source Code quản lý sách - Lập trình Laravel Ôn tập - Chương trình quản lý sách + danh mục sách - Lập trình PHP, Laravel Website thi trắc nghiệm lập trình Aptech - Lập trình laravel - Lập trình PHP Tạo 1 POS bán hàng cho siêu thị - Supper Market - Lập trình Laravel Video - Tạo 1 POS bán hàng cho siêu thị - Supper Market - Lập trình Laravel Video Hướng dẫn tim hiểu Pagination + model qua ví dụ quản lý sinh viên - Lập trình Laravel Tìm hiểu paginate trong laravel - Quản lý sản phẩm - Lập trình Laravel Ứng dụng Quản lý Sách trong Laravel Phân quyền - Chức năng nâng cao Video - Tìm hiểu Auth trong Laravel Video Phân Quyền-Hướng dẫn viết chức năng phân quyền người dùng theo role Lâp Trình PHP/Laravel Video API Resful Laravel - Hướng dẫn tạo API Resful bằng PHP/Laravel - Khóa học lập trình PHP/Laravel [Examination] Examination & Test + Website tra cứu luật giao thông đường bộ - Lập trình PHP - Lập trình Laravel [Examination] Bài tập ôn luyện kết thúc môn - Sử dụng Laravel + Ajax Thực Chiến: Web bán hàng Video Hướng dẫn tạo dự án super market - phần 1 - Laravel Video Hướng dẫn tạo dự án super market - phần 2- laravel Video Tạo giở hàng - học lập trình laravel qua project- Phần 3 - laravel Khóa Học Lập Trình Laravel Thực Chiến Video Source Code Dự Án - Thực Chiến Web Bán Hàng Video Phần 1 | Laravel | Web bán hàng - Giới thiệu công nghệ Video Phần 2 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL Video Phần 3 | Phân tích thiết kế CSDL (database) | Web bán hàng PHP/MySQL Video Phần 4 | Laravel | Thiết kế web bán hàng - Cài đặt dự án & Authetication & Migration CSDL Video Phần 5 | Laravel | Thực Chiến - Web Bán Hàng -Tích hợp template và chỉnh sửa trang đăng ký-đăng nhập Video Phần 6 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Role trong dự án Video Phần 7 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng quản lý người dung trong dự án Video Phần 8 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng quản lý danh mục Video Phần 9 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý sản phẩm Video Phần 10 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý tin tức Video Phần 11 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý phản hồi Video Phần 12 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng Quản lý đơn hàng Video Phần 13 | Laravel | Thực Chiến - Web Bán Hàng - Chức năng bảo mật trong dự án Video Phần 14 | Laravel | Thực Chiến - Web Bán Hàng - Trang Chủ & Phân Layout Video Phần 15 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Sản Phẩm Video Phần 16 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Tin Tức Video Phần 17 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Liên Hệ Unlisted Video Phần 18 | Laravel | Thực Chiến - Web Bán Hàng - FE Trang Chi Tiết Tin Tức Video Phần 19 | Laravel | Thực Chiến - Web Bán Hàng - FE Chi Tiết Sản Phẩm Video Phần 20 | Laravel | Thực Chiến - Web Bán Hàng - Trang giỏ hàng Video Phần 21 | Laravel | Thực Chiến - Web Bán Hàng - Trang thanh toán & hoàn thành thanh toán Video Phần 22 | Laravel | Final | Hướng dẫn cài đặt dự án từ source code mẫu
Laravel Tutorial

[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ụ:

$students = Student::paginate(10);

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ườngKiểu dữ liệuMô tả
idAuto IncrementMã sinh viên
namestringHọ và tên sinh viên
emailstringĐịa chỉ email
phonestringSố điện thoại
birthdaydateNgày sinh
addressstringĐịa chỉ
created_attimestampNgày tạo
updated_attimestampNgày cập nhật

Tạo migration trong Laravel:

php artisan make:migration create_students_table

Sau đó, định nghĩa bảng trong file migration:

Schema::create('students', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->string('phone'); $table->date('birthday'); $table->string('address'); $table->timestamps(); });

Chạy lệnh:

php artisan migrate

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

php artisan make:model Student

Trong file app/Models/Student.php, ta khai báo:

class Student extends Model { protected $fillable = ['name', 'email', 'phone', 'birthday', 'address']; }

Tạo dữ liệu mẫu (Seeder)

php artisan make:seeder StudentSeeder

Trong file database/seeders/StudentSeeder.php:

public function run() { \App\Models\Student::factory()->count(100)->create(); }

Sau đó tạo factory:

php artisan make:factory StudentFactory --model=Student

Khai báo dữ liệu mẫu trong database/factories/StudentFactory.php:

public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->unique()->safeEmail(), 'phone' => $this->faker->phoneNumber(), 'birthday' => $this->faker->date(), 'address' => $this->faker->address(), ]; }

Chạy seeder:

php artisan db:seed --class=StudentSeeder

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:

php artisan make:controller StudentController

Trong StudentController, thêm phương thức:

public function index() { $students = Student::paginate(10); return view('students.index', compact('students')); }

Route

Thêm route trong web.php:

Route::get('/students', [StudentController::class, 'index'])->name('students.index');

Giao diện hiển thị (Blade Template)

Tạo file resources/views/students/index.blade.php:

<table class="table table-bordered"> <thead> <tr> <th>ID</th> <th>Tên sinh viên</th> <th>Email</th> <th>Số đin thoi</th> <th>Ngày sinh</th> <th>Địa chỉ</th> </tr> </thead> <tbody> @foreach($students as $student) <tr> <td>{{ $student->id }}</td> <td>{{ $student->name }}</td> <td>{{ $student->email }}</td> <td>{{ $student->phone }}</td> <td>{{ $student->birthday }}</td> <td>{{ $student->address }}</td> </tr> @endforeach </tbody> </table> <div class="pagination"> {{ $students->links() }} </div>

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

$students = Student::paginate(20);

=> 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:

$students = Student::simplePaginate(10);

=> 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

$students = Student::where('name', 'like', '%Nguyen%')->paginate(10);

=> 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:

Paginator::useTailwind();

Hoặc dùng Bootstrap:

Paginator::useBootstrap();

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ụ:

public function index(Request $request) { $keyword = $request->input('keyword'); $students = Student::where('name', 'like', "%{$keyword}%") ->orWhere('email', 'like', "%{$keyword}%") ->paginate(10); return view('students.index', compact('students', 'keyword')); }

Trong view:

<form method="GET" action="{{ route('students.index') }}"> <input type="text" name="keyword" value="{{ $keyword ?? '' }}" placeholder="Tìm sinh viên..."> <button type="submit">Tìm kiếm</button> </form>

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

  1. Không hiển thị link phân trang:
    → Kiểm tra xem có sử dụng {{ $students->links() }} trong Blade không.

  2. Không giữ từ khóa tìm kiếm khi chuyển trang:
    → Dùng $students->appends(request()->all())->links() để giữ tham số.

  3. Hiệu năng chậm khi dữ liệu lớn:
    → Sử dụng simplePaginate() hoặc cursorPaginate() để tối ưu.

  4. Sai số bản ghi hiển thị:
    → Kiểm tra lại giá trị truyền vào paginate(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ụ:

return response()->json(Student::paginate(10));

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!



Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó

×