在其它的框架中,分页是非常让人苦恼的。而在 Laravel 中却是很轻而易举的。 Laravel 可以快速生成基于当前页面链接的智能「范围」,并且生成的 HTML 兼容于 Bootstrap CSS 框架。本项目中,我们将利用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 的结果做分页,建议你先进行数据库查找后再手动制作分页。
##「简易分页」 如果在你的视图中只需要显示简单的「下一步」和「上一步」链接,你可以选择使用 simplePaginate 方法来进行更高效的查找。当你不需要在页面上显示页码时,这对于大数据来说将会非常有用:
$users = DB::table('users')->simplePaginate(15);
##对 Eloquent 模型进行分页 你也可以对 Eloquent 进行分页。在这个例子中,我们将对 User 模型进行分页并且设置其每页有 15 条数据。如你所见,语法跟查询语句构造器的分页语法几乎一样:
$users = App\User::paginate(15);
当然,你也可以对 paginate 设置其它限制的查找,如 where 条件:
$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 实例。这些对象提供几种方法用来描述结果集。除了这些辅助函数之外,分页器的实例也是个迭代器,并且可以像数组一样来使用循环取值。
总之,一旦你获取到结果,就可以对结果进行显示,并使用 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分页的核心内容,先复习到这里,详情参考*官方文档-分页* ,下面在我们的项目中使用分页方法: #项目实战 ##1、获取学生列表,并分页
/** * 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')); }
##2、将分页结果显示在视图 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(); ?> 输出分页列表**渲染即可。
来源:oschina
链接:https://my.oschina.net/u/2557944/blog/678904