[Laravel] Phân trang trong laravel framework

Bởi Thu Ton vào January 2016

Phân trang dữ liệu là vấn đề quan trọng mà bất kỳ website nào cũng cần phải có.Chắc hẳn khi các bạn đọc bài viết này các bạn đã có khái niệm về phân trang cũng như hiểu thuật phân trang trong php rồi phải không nào.Trong các PHP framework hiện này thì đều tích hợp thư viện phân trang và mỗi framework có thuật toán phân trang khác nhau.Laravel Framework cũng vậy nó cung cấp cho chúng ta rất nhiều phương thức phân trang đơn giản và hiệu quả.

Phân trang trong laravel framework

– Để có dữ liệu test cho phần này mình sẽ sử dụng artisan để tạo migration bảng user (về cách tạo các bạn có thể xem lại bài trước cách tạo migration )

Bảng users

– Trong Laravel để cấu hình phân trang rất đơn giản các bạn chỉ cần vào app/config/view.php

1
2
3
4
5
<?php
return array(
    ...
    'pagination' => 'pagination::slider',
);

– Theo mặc định là laravel có 2 kiểu phân trang sau:

    1. pagination::slider Phương thức này sẽ cho chúng ta hiển thị các link phần trang đầy đủ
    2. 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

Sử dụng Query Buider

– Đây là cách phân trang đơn giản nhất,các bạn có thể sử dụng lớp Query Buider để thực hiện:

1
$users = DB::table('user')->paginate(5);

Với câu lệnh trên chúng ta đang lấy ra 5 thành viên trên 1 trang.

Sử dụng Eloquent Model

– Với cách này các bạn chỉ cần sử dụng:

1
$users = User::paginate(5);

Ngoài ra các bạn cũng có thể thêm các điều kiện cho việc phân trang,các bạn có thể xem các câu điều kiện sử dụng trong Eloquent ORM ở đây,ví dụ:

1
$users = User::where('id', '>', 20)->paginate(5);

Phân trang dữ liệu với “Simple Pagination”

– Đây là cách phân trang dữ liệu đơn giản chỉ có nút Next Previous

1
$users = User::where('id', '>', 20)->simplePaginate(5);

Phân trang dữ liệu thủ công

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

1
$paginator = Paginator::make($users, $totalUser, $perPage);

Bạn cũng có thể thay đổi đường dẫn của các link phân trang như sau:

1
2
$users = User::paginate();
$users->setBaseUrl('custom/url');

Lúc này nó sẽ tạo ra link dạng :

http://example.com/custom/url?page=2

Thêm dữ liệu vào link phân trang

– Trong 1 số trường hợp mà bạn cần thêm 1 vài tham số vào link phân trang thì chúng ta có thể sử dụng phương thức appends ,ví dụ:

1
<?php echo $users->appends(array('param' => 'value'))->links(); ?>

Lúc này nó sẽ tạo ra link có dạng:

http://example.com/custom?url=2&param=value

Hiển thị dữ liệu phân trang

– Sau khi lấy dữ liệu phân trang trong CSDL xong Laravel sẽ trả về cho chúng ta 1 mảng các đối tượng,lúc này chúng ta chỉ cần gửi dữ liệu đó sang bên view và hiển thị:

1
return View::make('user.index')->with('users',$users);

Phần view hiển thị sẽ như sau:

1
2
3
4
5
6
<div class="list_user">
    <?php foreach ($users as $user): ?>
        <?php echo $user->name; ?>
    <?php endforeach; ?>
</div>
<?php echo $users->links(); ?>

Phương thức links() sẽ thực hiện tạo link phân trang cho chúng ta,nếu bạn muốn tùy chỉnh link phân trang theo ý muốn của mình có thể sử dụng:

1
<?php echo $users->links('view.name'); ?>

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

  1. getCurrentPage
  2. getLastPage
  3. getPerPage
  4. getTotal
  5. getFrom
  6. getTo
  7. count

– See more at: http://hocphp.info/phan-trang-trong-laravel-framework/