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

在其它的框架中,分页是很是让人苦恼的。而在 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

分页结果: tu

咱们能够看到,Laravel的分页使用很是简单,在控制器中调用分页方法**$ret->paginate(2);,而后在视图中用<?php echo $users->render(); ?> 输出分页列表**渲染便可。

相关文章
相关标签/搜索