分页

简介

在其他框架中,分页通常是比较痛苦的。laravel 使其变的非常简单。laravel 可以根据当前页面快速的生成智能的范围链接,并且其生成的 HTML 是兼容 Bootstrap CSS framework 的。

基础用法

对查询构建器结果进行分页

这里有几种方式来对元素进行分页。而最简单的方式就是通过使用查询构造器或者 Eloquent 查询的 paginate 方法。paginate 方法会根据当前用户所访问的当前页面来自动的设置正确的位移和显示的范围。默认的,当前页面是通过 HTTP 请求的查询字符串 ?page 来自动获取的。当然,laravel 会自动的检测到这个值,并且会自动的在生成的分页器的链接中插入合适的值。

首先,让我们来看一下在查询中调用 paginate 方法。在这个例子中,你仅需要在 paginate 方法中传递每页所需要

展示的数量。让我们来设置每页展示的数量为 15 :

<?phpnamespace App\Http\Controllers;use DB;
use App\Http\Controllers\Controller;class UserController extends Controller
{/*** Show all of the users for the application.** @return Response*/public function index(){$users = DB::table('users')->paginate(15);return view('user.index', ['users' => $users]);}
}

注意:目前,laravel 中使用 groupBy 语法不能正确的进行分页操作。如果你需要使用 groupBy 来对结果进行分页,推荐你手动的执行查询和进行分页。

简单的分页

如果你只需要简单的显示“上一页”和“下一页”链接,你可以选择使用 simplePaginate 方法来执行一个有效的查询。这对于一些大型的数据库在视图中不需要显示每一页的链接时非常有效:

$user = DB::table('users')->simplePaginate(15);

对 Eloquent 结果进行分页

你也可以对 Eloquent 查询的结果进行分页。我们来对 User 模型以每页显示 15 项的方式来进行分页。其语法和使用查询构造器进行分页非常像:

$users = App\User::paginate(15);

当然,你也可以优先进行其他查询之后再进行分页操作:

$users = User::where('votes', '>', 100)->paginate(15);

你同样也可以在 Eloquent 模型分页时使用 simplePaginate 方法:

user = User::where('votes', '>', 100)->simplePaginate(15);

手动的创建分页器

有时候你可能需要手动的创建一个分页实例,它传递项目的数组。你可以创建 Illuminate\Pagination\Paginator 或者 Illuminate\Pagination\LengthAwarePaginator 实例,这取决于你的需求。

Paginator 类不需要知道结果中项目的总数量。事实上,正是因为这样,这个类并没有提供获取最后一页的方法。LengthAwarePaginator 类似于 Paginator 接收几乎同样的参数。但是,它需要在结果中包含项目的总数目。

另一方面,Paginator 对应查询构造器和 Eloquent 中的 simplePaginate 方法。而 LengthAwarePaginator 对应 paginate 方法。

当手动的创建分页器实例时,你应该手动的对传递到分页器中的结果进行切片操作,如果你并不明白如何去进行分片,请查看 PHP 的 array_slice 方法。

在视图中显示结果

当你对查询构造器或者 Eloquent 查询使用 paginate 或者 simplePaginate 方法时,你可以获取到分页器的实例。当调用 paginate 方法时,你会获取到一个 Illuminate\Pagination\LengthAwarePaginator 实例,当调用 simplePaginate 方法时,你会获得一个 Illuminate\Pagination\Paginator 的实例。这些对象会提供多种方法来描述结果集。除了这些帮助方法,分页器本身也是一个迭代器,它可以像数组一样被循环操作。

所以,一旦你获取到了分页结果,你可以像这样在 Blade 视图中来显示和生成分页链接:

<div class="container">@foreach ($users as $user){{ $user->name }}@endforeach
</div>{{ $users->links() }}

links 方法会根据结果集来生成分页结果。对每一个链接都会自动包含 ?page 查询变量。使用 links 方法生成的 HTML 是兼容 Bootstrap CSS 框架的。

自定义分页器 URL

setPath 方法允许你对分页器生成的链接的 URI 进行定制化。比如,你希望分页器生成类似于 http://example.com/custom/url?page=N,你可以传递 custom/urlsetPath 方法:

Route::get('users', function () {$users = App\User::paginate(15);$users->setPath('custom/url');
});

追加查询字符串到分页器链接

你可以通过使用 appends 方法来添加查询字符串到分页器链接中。比如,在分页器链接中追加 &sort=votes 查询字符串。你可以像下面一样调用 appends 方法:

{{ $users->appends(['sort' => 'votes'])->links() }}

如果你需要在分页器的 URLs 中添加一个 hash 分段,你可以使用 fragment 方法。比如,在分页链接中添加 #foo

{{ $users->fragment('foo')->links() }}

其他帮助方法

你可以调用分页器实例的下面的方法来访问额外的分页器信息:

  • $results->count()
  • $results->currentPage()
  • $results->firstItem()
  • $results->hasMorePages()
  • $results->lastItem() (Not avaliable when using simplePaginate)
  • $results->nextPageUrl()
  • $results->perPage()
  • $results->previousPageUrl()
  • $results->total() (Not available when using simplePaginate)
  • $results->url($page)

转换结果为 JSON

laravel 的分页器类实现了 Illuminate\Contracts\Support\JsonableInterface 契约并且暴露了 toJson 方法,所以它可以非常简单的将分页结果转换为 JSON 格式。

你也可以在路由或者控制器动作中简单的返回分页器实例来进行 JSON 格式的响应:

Route::get('users', function () {return App\User::paginate();
});

分页器的 JSON 信息会包含许多的元数据,比如 totalcurrent_pagelast_page 等等。而实际的结果对象集会保存在 JSON 数组的 data 键中。下面是一个从路由中返回分页器实例的响应示例:

分页器 JSON 示例

{"total": 50,"per_page": 15,"current_page": 1,"last_page": 4,"next_page_url": "http://laravel.app?page=2","prev_page_url": null,"from": 1,"to": 15,"data":[{// Result Object},{// Result Object}]
}

Laravel-分页相关推荐

  1. laravel 分页php_laravel 分页 seo浅谈

    php中文网最新课程 每日17点准时技术干货分享 laravel 的分页是非常简单易用的,但是有一点不是非常理想, 默认的分页生成的链接是 users?page=1 这种形式对seo不是非常友好(理论 ...

  2. laravel 分页

    2.1 基于查询构建器分页 有多种方式实现分页,最简单的方式就是使用查询构建器或Eloquent模型的paginate方法.该方法基于当前用户查看页自动设置合适的偏移(offset)和限制(limit ...

  3. Laravel分页设置与查询构造器查询数据集转为数组

    分页设置 //从第一条开始查询(不包含第一条数据),查询10条数据. User::offset(1)->limit(10)->get(); 查询数据集转为数组 $data = DB::ta ...

  4. php日期分页,php – Laravel分页不适用于日期搜索

    这是我的解决方案: 我对不同的搜索请求有相同的视图,因此我将结果附加到分页器,以便它也可以在下一页上显示.名称是搜索表单中name属性的值.在我的情况下,我有多个.这是一个例子: {!! $ticke ...

  5. laravel 分页带参数

    {{$data->appends(request()->except(['page']))->links()}} 转载于:https://www.cnblogs.com/simado ...

  6. Laravel自定义分页样式

    Laravel 的分页组件默认为 Bootstrap 的分页样式,但如果我们用的并不是 Bootstrap 或者说分页的 HTML结构不一样,这时我们需要自定义分页.其实 Laravel 的分页组件是 ...

  7. php laravel 伪静态文件,关于 Laravel 项目 伪静态分页处理

    下面由Laravel教程栏目给大家介绍Laravel 项目 伪静态分页处理 ,希望对需要的朋友有所帮助!手上有个 Laravel 的项目,要求做伪静态处理,项目中使用了 Laravel 自带的分页组件 ...

  8. laravel5.5中添加对分页样式的修改上一页和下一页

    博客原文地址http://www.xiegaosheng.com/post/view?id=93; laravel自带的分页样式有点丑,laravel支持自定义样式的, 想把上一页和下一页显示成汉字而 ...

  9. 关于PHP学习的各种网站

    http://www.shouce.ren/ 各种开发手册 http://yii2.techbrood.com/guide-upgrade-from-v1.html yii2.0和之前版本的区别 ht ...

  10. laravel 5.5 顶部带条件分页查询

    一.前言 这个问题也是老生常谈了.顶部搜索好做,分页也好做,但是带着条件分页就不太好做.也是博主自己看文档不仔细.后面仔细看文档,发现了laravel 5.5 本身就提供了这样一个方法. 文档位置:L ...

最新文章

  1. class viewController has no initializers解决办法
  2. java不同的数据源如何处理_java – 如何在不同的数据源上创建两个类之间的关系?...
  3. ASP.Net 中Frames 的一些使用说明...
  4. 看一名 KDE 开发者如何使用 C++17 为项目提升巨大速度
  5. 读----------空乏的估算
  6. 【C 语言】指针间接赋值 ( 间接赋值三要素 | 间接赋值 使用的三种场景 )
  7. 容器技术Docker云计算实战 镜像操作大总结
  8. 【Python教程】装饰器的使用及固定模式
  9. Application package 'AndroidManifest.xml' must have a minimum of 2 segments错误
  10. Android中网络请求创建单个线程池的方法
  11. unity使用VideoPlayer播放视频
  12. Maven最新版的下载与安装教程(详细教程)
  13. 微信unionid机制
  14. Photoshop实例视频教程
  15. 统计案例 | 统计数据会说谎?
  16. FusionCharts学习总结
  17. 《Spring+Spring MVC+MyBatis从零开始学》傻瓜式学习笔记
  18. 了解.net框架 MonoRail
  19. [指北针分类信息软件 v1.5.2.1] 全自动分类信息软件+高效稳定建立SEO外部链接
  20. c语言中 在对全部数组元素赋初值时,在对数组全部元素赋初值时,不可以省略行数,但能省略列数...

热门文章

  1. 晨读美文推荐【英文悦读】-《a day so happy》
  2. 一款好用的网络骗子举报系统无加密版本源码
  3. 思途智旅干货分享!抖音旅游号怎么做,如何卖旅游产品?
  4. 06.15 iptables防火墙
  5. python与selenium_项目篇_项目实战、代码优化、项目重构
  6. SQLite,嵌入式数据库
  7. MySQL安装到最后一步未响应的五种解决方法
  8. 计算机专业想考海关,2018年国考想考海关系统 你得知道这六件事情
  9. HYBBS新模板一个非常漂亮的bbs源码
  10. 历史上的今天:Win10 七周年;微软和雅虎的搜索协议;微软发行 NT 4.0