Laravel5学生成绩管理系统-05-分页

本小妞迷上赌 提交于 2019-12-01 18:39:37

在其它的框架中,分页是非常让人苦恼的。而在 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(); ?> 输出分页列表**渲染即可。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!