在其它的框架中,分頁是很是讓人苦惱的。而在 Laravel 中倒是很垂手可得的。 Laravel 能夠快速生成基於當前頁面連接的智能「範圍」,而且生成的 HTML 兼容於 Bootstrap CSS 框架。本項目中,咱們將利用laravel的分頁功能,來輕鬆處理學生列表的分頁。php
強烈建議新手或不熟練的朋友在作分頁時先仔細的閱讀下官方文檔。官方文檔-分頁laravel
#基本使用 ##對查詢語句構造器進行分頁 有幾種方法能夠對項目進行分頁。最簡單的是使用 paginate 方法。在使用 查詢語句構造器 或是 Eloquent 查找 時。由 Laravel 提供的 paginate 方法可以自動斷定當前頁面正確的數量限制和偏移數。默認情況下,當前頁數由 HTTP 請求所帶的** ?page **參數來決定。固然,該值由 Laravel 自動檢測,並自動插入由分頁器生成的連接。數據庫
首先,讓咱們來看看如何在數據庫查找時使用 paginate 方法。在這個例子中,傳遞給 paginate 惟一的參數是你想在「每頁」顯示的數據數。咱們在此指定每頁顯示 15 條數據:數組
<?php namespace App\Http\Controllers; use DB; use App\Http\Controllers\Controller; class UserController extends Controller { /** * 顯示應用的全部用戶。 * * @return Response */ public function index() { $users = DB::table('users')->paginate(15); return view('user.index', ['users' => $users]); } }
注意:目前, Laravel 的分頁沒法有效操做含有 groupBy 的語句。若是你須要對使用 groupBy 的結果作分頁,建議你先進行數據庫查找後再手動製做分頁。app
##「簡易分頁」 若是在你的視圖中只須要顯示簡單的「下一步」和「上一步」連接,你能夠選擇使用 simplePaginate 方法來進行更高效的查找。當你不須要在頁面上顯示頁碼時,這對於大數據來講將會很是有用:框架
$users = DB::table('users')->simplePaginate(15);
##對 Eloquent 模型進行分頁 你也能夠對 Eloquent 進行分頁。在這個例子中,咱們將對 User 模型進行分頁而且設置其每頁有 15 條數據。如你所見,語法跟查詢語句構造器的分頁語法幾乎同樣:函數
$users = App\User::paginate(15);
固然,你也能夠對 paginate 設置其它限制的查找,如 where 條件:post
$users = User::where('votes', '>', 100)->paginate(15);
或者也能夠在使用 Eloquent 模型進行分頁時使用 simplePaginate 方法:大數據
$users = User::where('votes', '>', 100)->simplePaginate(15);
##將分頁結果顯示在視圖中 當在查詢語句構造器或 Eloquent 中使用 simplePaginate 方法或 paginate 方法時,你會獲得一個分頁器的實例。當使用 paginate 方法時,將獲得 Illuminate\Pagination\LengthAwarePaginator 實例。當使用 simplePaginate 方法時,則會獲得 Illuminate\Pagination\Paginator 實例。這些對象提供幾種方法用來描述結果集。除了這些輔助函數以外,分頁器的實例也是個迭代器,而且能夠像數組同樣來使用循環取值。url
總之,一旦你獲取到結果,就能夠對結果進行顯示,並使用 Blade 模板渲染頁面的連接:
<div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {!! $users->render() !!}
render 方法將給予查找結果中其它頁面的連接。每個連接中都已經包含正確的 ?page 查找字符串變量。請記住,由 render 方法生成的 HTML 兼容於 Bootstrap CSS 框架。
**注意:**當在 Blade 模版中使用 render 方法時,必定要使用 {! !} 語法,這樣 HTML 連接纔不會被轉義。
##加入參數到分頁連接中 你可使用 appends 方法添加所須要的參數到分頁連接中。例如,要加入 &sort=votes 到每一個分頁連接時,你應該這樣使用 appends 方法:
{!! $users->appends(['sort' => 'votes'])->render() !!}
OK,以上就爲Laravel分頁的核心內容,先複習到這裏,詳情參考*官方文檔-分頁* ,下面在咱們的項目中使用分頁方法: #項目實戰 ##一、獲取學生列表,並分頁
/** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // 獲取學生列表 $ret = UsersInfo::where('is_admin', 0); // 獲取總數 $count = $ret->count(); // 分頁 $users = $ret->paginate(2); return view('Admin.index', compact('users', 'count')); }
##二、將分頁結果顯示在視圖 Admin/index.blade.php
@extends('master') {{-- 繼承master模版 --}} @section('title') 管理員 @stop @section('content') <div class="container"> <div class="row"> <div class="col-md-10"> @include('errors.list') ### 學生信息表 <table class="table table-hover"> <tr> <td>學號</td> <td>姓名</td> <td>性別</td> <td>手機</td> <td>班級</td> <td>郵箱</td> <td>操做</td> </tr> @if (count($users)) @foreach ($users as $user) <tr> <td>{{ $user->id }}</td> <td>{{ $user->name }}</td> <td>{{ $user->sex }}</td> <td>{{ $user->phone }}</td> <td>{{ $user->pro_class }}</td> <td>{{ $user->email }}</td> <td> <button class="btn btn-sm btn-info" data-toggle="modal" data-target="#myModal{{$user->id}}">更新分數</button> <form action="{{ url('admin/'.$user->id) }}" style='display: inline' method="post"> <input type="hidden" name="_method" value="DELETE"> <input type="hidden" name="_token" value="{{csrf_token()}}"> <button class="btn btn-sm btn-danger" onclick="return confirm('肯定刪除?')">刪除</button> </form> </td> </tr> read1 @endforeach @else # 沒有學生名單,請管理員添加 @endif </table> {{-- 分頁 --}}} <?php echo $users->render(); ?> </div> read2 </div> </div> @stop
分頁結果:
咱們能夠看到,Laravel的分頁使用很是簡單,在控制器中調用分頁方法**$ret->paginate(2);,而後在視圖中用<?php echo $users->render(); ?> 輸出分頁列表**渲染便可。