Tạo bởi Trần Văn Điêp|
Học 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

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!

Phản hồi từ học viên

5

Tổng 0 đánh giá

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

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