Pagination trong Laravel
Bài đăng này đã không được cập nhật trong 3 năm
Giới thiệu
Trong các framework mà tôi từng làm việc, tôi cảm nhận thấy laravel hỗ trợ việc phân trang rất đơn giản, nhanh gọn mà lại phù hợp với công nghệ hiện thời. Việc tích hợp và sử dụng phân trang trong laravel khá dễ dàng, Laravel có thể tạo nhanh chóng phạm vi link của các trang hiện tại và các trang lân cận, cũng như việc tạo các trang HTML phù hợp và tương thích với Bootstrap CSS framework..
Cấu hình
Trong Laravel 5 việc cấu hình phần phân trang ta thêm trong file config/view.php
như sau:
<?php
return array(
...
'pagination' => 'pagination::slider-3',
);
– Theo mặc định là laravel có 2 kiểu phân trang sau:
pagination::slide
Phương thức này sẽ cho chúng ta hiển thị các link phần trang đầy đủpagination::simple
Phương thức này phân trang dưới link đơn giản chỉ có nút Next và Previous
Các cách phân trang trong laravel
Giả sử với tập dữ liệu mẫu về các thương hiệu thời trang trên thế giới như sau:
Để phân trang với Laravel là điều cực kì đơn giản, thay vì bạn phải $brands = Brand::all()
lấy toàn bộ bản ghi của Brand thì bạn chỉ cần lấy phân trang và lấy theo 10 bản ghi
// Sử dụng Eloquent Model
$brands = Brand::paginate(10);
// Sử dụng Query Builder
$brands = DB::table('brands')->paginate(10);
Trong một số trường bạn đã có sẵn dữ liệu mà không phải lấy từ csdl thì bạn có thể phân trang theo cách thủ công thông qua phương thức Paginator::make
,ví dụ:
$paginator = Paginator::make($brands, $totalBrand, $perPage);
// Bạn có thể thay đổi được đường dẫn link của các trang đã phân như sau:
$brands = Brand::paginate();
$brands->setBaseUrl('custom/url');
Khi đó link của trang sẽ có dạng:
Hay là bạn cũng có thể phân trang dữ liệu đơn giản chỉ có nút Next và Previous bằng cách sử dụng $brands = Brand::simplePaginate(10);
Trên view để hiển thị link phân trang thì điều tiên quyết chúng ta phải chèn
{{ $brands->links(); }}
vào trong view.
Sau đó ta có thành quả như sau:
Một số tiện ích khác
Laravel cung cấp cho chúng các phương thức để thao tác và tùy chỉnh với việc phân trang dữ liệu:
getCurrentPage
getLastPage
getPerPage
getTotal
getFrom
getTo
count
Tài liệu tham khảo
All rights reserved