22
33- [ 简介] ( #introduction )
44- [ 基本用法] ( #basic-usage )
5- - [ 对查询语句构造器进行分页 ] ( #paginating-query-builder-results )
6- - [ 对 Eloquent 模型进行分页 ] ( #paginating-eloquent-results )
5+ - [ 查询构造器分页 ] ( #paginating-query-builder-results )
6+ - [ Eloquent 分页 ] ( #paginating-eloquent-results )
77 - [ 手动创建分页] ( #manually-creating-a-paginator )
88- [ 显示分页结果] ( #displaying-pagination-results )
9- - [ 将结果转换为JSON ] ( #converting-results-to-json )
9+ - [ 将结果转换为 JSON ] ( #converting-results-to-json )
1010- [ 自定义分页视图] ( #customizing-the-pagination-view )
1111- [ 分页器实例方法] ( #paginator-instance-methods )
1212
1313<a name =" introduction " ></a >
1414## 简介
1515
16- 在其他的框架中,分页往往是令人十分头疼的 。 Laravel 的分页器与 [ 查询语句构造器 ] ( /docs/{{version}}/queries ) 、 [ Eloquent ORM] ( /docs/{{version}}/eloquent ) 集成在一起,为数据库结果集提供了便捷的、开箱即用的分页器。分页器生产的 HTML 兼容 Bootstrap CSS framework.
16+ 在大多数的框架中,分页无不令人十分头疼 。 Laravel 的分页器与[ 查询构造器 ] ( /docs/{{version}}/queries ) 、 [ Eloquent ORM] ( /docs/{{version}}/eloquent ) 集成在一起,并提供方便易用的数据结果集分页。分页器生成的 HTML 与 Bootstrap CSS 框架兼容。
1717
1818<a name =" basic-usage " ></a >
1919## 基本用法
2020
2121<a name =" paginating-query-builder-results " ></a >
22- ### 对查询语句构造器进行分页
22+ ### 查询构造器分页
2323
24- 有几种方法可以对项目进行分页 。最简单的是在 [ 查询语句构造器] ( /docs/{{version}}/queries ) 或 [ Eloquent 查询] ( /docs/{{version}}/eloquent ) 中使用 ` paginate ` 方法。 ` paginate ` 方法会自动基于用户当前所查看的页面来设置适当的限制和偏移 。默认情况下,当前页面通过 HTTP 请求所带的 ` page ` 字符串参数的值来检测。当然,这个值会被 Laravel 自动检测,并且自动插入到由分页器产生的链接中 。
24+ 有几种方法可以对数据进行分页 。最简单的是在 [ 查询语句构造器] ( /docs/{{version}}/queries ) 或 [ Eloquent 查询] ( /docs/{{version}}/eloquent ) 中使用 ` paginate ` 方法。 ` paginate ` 方法会自动根据用户正在查看的页面来设置限制和偏移量 。默认情况下,当前页面通过 HTTP 请求所带的参数 ` page ` 的值来检测。这个值是被 Laravel 自动检测到的,也会自动插入到由分页器生产的链接中 。
2525
26- 在下面这个例子中,传递给 ` paginate ` 方法的唯一参数是你希望在 「每页」显示的项目条数。在这种情况下,就让我们将显示的数据条数指定为 ` 15 ` 条每页 :
26+ 在下面这个例子中,传递给 ` paginate ` 方法的唯一参数是 「每页」显示的项目数量。下面是每页显示 ` 15 ` 条数据的例子 :
2727
2828 <?php
2929
4747 }
4848 }
4949
50- > {note} 目前,Laravel无法有效执行使用 ` groupBy ` 语句的分页操作。如果你需要在一个分页结果集中使用 ` groupBy ` ,建议你查询数据库并手动创建分页器。
50+ > {note} 目前,Laravel 无法高效执行使用 ` groupBy ` 语句的分页操作。如果你需要在分页结果集中使用 ` groupBy ` ,建议你查询数据库并手动创建分页器。
5151
52- #### " 简单分页"
52+ #### 「 简单分页」
5353
54- 如果你只需要在你的分页视图中显示简单的「上一页 」和「下一页 」的链接,你可以使用 ` simplePaginate ` 方法来执行更高效的查询。这在你操作大型数据集、渲染视图时不需要显示页码链接的时候非常有用 :
54+ 如果你只需要在分页视图中显示简单的「下一页 」和「上一页 」的链接,即不需要显示每个页码的链接,更推荐使用 ` simplePaginate ` 方法来执行更高效的查询:
5555
5656 $users = DB::table('users')->simplePaginate(15);
5757
5858<a name =" paginating-eloquent-results " ></a >
59- ### 对 Eloquent 模型进行分页
59+ ### Eloquent 模型分页
6060
61- 你也可以对 [ Eloquent] ( /docs/{{version}}/eloquent ) 查询进行分页。在这个例子中,我们将对 ` User ` 模型进行分页并且每页显示 ` 15 ` 条数据。正如你看到的,语法几乎与基于查询语句构造器分页时的完全相同 :
61+ 你也可以对 [ Eloquent] ( /docs/{{version}}/eloquent ) 查询进行分页。下面的例子中对 ` User ` 模型进行了分页并且每页显示 ` 15 ` 条数据。正如你看到的,所使用的语法几乎与基于查询语句构造器分页时的完全相同 :
6262
6363 $users = App\User::paginate(15);
6464
65- 当然,你可以在对查询设置了其他约束条件之后调用 ` paginate ` 方法,例如 ` where ` 子句 :
65+ 当然,你可以在设置了查询的其他约束条件之后调用 ` paginate ` 方法,例如 ` where ` 语句 :
6666
6767 $users = User::where('votes', '>', 100)->paginate(15);
6868
69- 你也可以在对 ` Eloquent ` 模型进行分页使用 ` simplePaginate ` 方法 :
69+ 你也可以在 ` Eloquent ` 模型中使用 ` simplePaginate ` 方法进行分页 :
7070
7171 $users = User::where('votes', '>', 100)->simplePaginate(15);
7272
7373<a name =" manually-creating-a-paginator " ></a >
7474### 手动创建分页
7575
76- 有些时候你可能希望手动创建一个分页实例,将其传递为一个项目数组。你可以依据你的需求创建 ` Illuminate\Pagination\Paginator ` 或 ` Illuminate\Pagination\LengthAwarePaginator ` 实例 。
76+ 如果你想手动创建分页实例并且最终得到一个数组类型的结果,可以根据需求来创建 ` Illuminate\Pagination\Paginator ` 或者 ` Illuminate\Pagination\LengthAwarePaginator ` 实例来实现 。
7777
78- ` Paginator ` 类不需要知道结果集中的数据项总数;然而,正因如此,该类没有用于检索最后一页索引的方法。 ` LengthAwarePaginator ` 接收的参数几乎和 ` Paginator ` 一样;但是,它需要计算结果集中的数据项总数 。
78+ ` Paginator ` 类不需要知道结果集中的数据量,因此该类没有检索最后一页索引的方法。而 ` LengthAwarePaginator ` 接收的参数几乎和 ` Paginator ` 一样,但它却需要计算结果集中的数据量 。
7979
80- 换句话说 ,` Paginator ` 相当于查询语句构造器和 Eloquent 中的 ` simplePaginate ` 方法,而 ` LengthAwarePaginator ` 则相当于 ` paginate ` 方法。
80+ 说白了就是 ,` Paginator ` 相当于查询语句构造器和 Eloquent 中的 ` simplePaginate ` 方法,而 ` LengthAwarePaginator ` 相当于 ` paginate ` 方法。
8181
82- > {note} 当手动创建分页器实例时 ,你应该手动「切割」传递给分页器的结果集数组。如果你不确定如何去做到这一点,请查阅 PHP 的 [ array_slice] ( https://secure.php.net/manual/en/function.array-slice.php ) 函数。
82+ > {note} 手动创建分页器实例时 ,你应该手动「切割」传递给分页器的结果集数组。如果你不确定如何去做到这一点,请查阅 PHP 的 [ array_slice] ( https://secure.php.net/manual/en/function.array-slice.php ) 函数。
8383
8484<a name =" displaying-pagination-results " ></a >
8585## 显示分页结果
8686
87- 当调用 ` paginate ` 方法的时候 ,你将会接收到一个 ` Illuminate\Pagination\LengthAwarePaginator ` 实例。而当你调用 ` simplePaginate ` 方法时,你将会接收到一个 ` Illuminate\Pagination\Paginator ` 实例。这些对象提供了一些用于描述结果集的方法。除了这些辅助方法,分页器实例也是一个迭代器,并且可以作为数组循环 。因此,一旦检索到结果集 ,你可以使用 [ Blade] ( /docs/{{version}}/blade ) 模板显示结果集并渲染页面链接:
87+ 在调用 ` paginate ` 方法时 ,你将会接收到一个 ` Illuminate\Pagination\LengthAwarePaginator ` 实例。当调用 ` simplePaginate ` 方法时,你将会接收到一个 ` Illuminate\Pagination\Paginator ` 实例。这些对象提供了一些用于渲染结果集的函数。除了这些辅助函数,分页器实例是一个迭代器,也可以作为数组循环 。因此,一旦检测到结果集 ,你可以使用 [ Blade] ( /docs/{{version}}/blade ) 模板显示结果集并渲染页面链接:
8888
8989 <div class="container">
9090 @foreach ($users as $user)
9494
9595 {{ $users->links() }}
9696
97- ` links ` 方法将会链接渲染到结果集中其余的页。这些链接中每一个都已经包含了适当的 ` page ` 查询字符串变量。记住,` links ` 方法生产的 HTML 兼容 [ Bootstrap CSS framework ] ( https://getbootstrap.com ) 。
97+ ` links ` 方法将会链接渲染到结果集中其余的页面。每个链接都包含了正确的 ` page ` 查询字符串变量。记住,` links ` 方法生成的 HTML 与 [ Bootstrap CSS 框架 ] ( https://getbootstrap.com ) 兼容 。
9898
9999#### 自定义分页器的 URI
100100
101- ` withPath ` 方法允许你在生成链接时自定义分页器所使用的 URI 。例如,如果你想分页器生成的链接如 ` http://example.com/custom/url?page=N ` ,你应该传递 ` custom/url ` 到 ` withPath ` 方法:
101+ ` withPath ` 方法允许你在生成链接时自定义分页器所使用的 URI。例如,如果你想要分页器生成像 ` http://example.com/custom/url?page=N ` 这样的链接,那就传递 ` custom/url ` 到 ` withPath ` 方法:
102102
103103 Route::get('users', function () {
104104 $users = App\User::paginate(15);
110110
111111#### 附加参数到分页链接中
112112
113- 你可以使用 ` append ` 方法附加查询参数到分页链接中 。例如,要附加 ` sort=votes ` 到每个分页链接,你应该这样调用 ` append ` 方法:
113+ 你可以使用 ` appends ` 方法将查询参数附加到分页链接中 。例如,要将 ` sort=votes ` 附加到每个分页链接,可以这样调用 ` appends ` 方法:
114114
115115 {{ $users->appends(['sort' => 'votes'])->links() }}
116116
117- 如果你希望附加 「哈希片段」到分页器的链接中,你应该使用 ` fragment ` 方法。例如,要附加 ` #foo ` 到每个分页链接的末尾 ,应该这样调用 ` fragment ` 方法:
117+ 如果想将 「哈希片段」附加到分页器的链接中,就使用 ` fragment ` 方法。例如,要将 ` #foo ` 附加到每个分页链接的末尾 ,应该这样调用 ` fragment ` 方法:
118118
119119 {{ $users->fragment('foo')->links() }}
120120
121121<a name =" converting-results-to-json " ></a >
122122### 将结果转换为 JSON
123123
124- Laravel 分页器结果类实现了 ` Illuminate\Contracts\Support\Jsonable ` 接口契约并且提供 ` toJson ` 方法,所以它很容易将你的分页结果集转换为 JSON。你也可以通过简单地从路由返回或者控制器 action 的方式,将分页实例转换为 JSON :
124+ Laravel 分页器结果类实现了 ` Illuminate\Contracts\Support\Jsonable ` 接口契约并且提供 ` toJson ` 方法,因此将分页结果转换为 JSON 非常简单。你也可以在路由或控制器操作中简单地将分页实例转换为 JSON 返回 :
125125
126126 Route::get('users', function () {
127127 return App\User::paginate();
128128 });
129129
130- 从分页器获取的 JSON 将包含元信息,如: ` total ` , ` current_page ` , ` last_page ` 等等。实际的结果对象将通过 JSON 数组中的 ` data ` 键来获取。 以下是一个从路由返回分页器实例创建的 JSON 示例:
130+ 分页器中获取的 JSON 将包含元信息,如:` total ` 、 ` current_page ` 、 ` last_page ` 等等。实际的结果对象将通过 JSON 数组中的 ` data ` 键来获取。 以下是一个从路由返回的分页器实例创建的 JSON 示例:
131131
132132 {
133133 "total": 50,
134134 "per_page": 15,
135135 "current_page": 1,
136136 "last_page": 4,
137+ "first_page_url": "http://laravel.app?page=1",
138+ "last_page_url": "http://laravel.app?page=4",
137139 "next_page_url": "http://laravel.app?page=2",
138140 "prev_page_url": null,
141+ "path": "http://laravel.app",
139142 "from": 1,
140143 "to": 15,
141144 "data":[
@@ -151,45 +154,46 @@ Laravel 分页器结果类实现了 `Illuminate\Contracts\Support\Jsonable` 接
151154<a name =" customizing-the-pagination-view " ></a >
152155## 自定义分页视图
153156
154- 在默认情况下,视图渲染显示的分页链接都兼容 Bootstrap CSS 框架 。但是,如果你不使用 Bootstrap,你可以随意定义你自己的视图去渲染这些链接。当在分页器实例中调用 ` links ` 方法时,传递视图名称作为方法的第一参数即可 :
157+ 默认情况下,渲染分页链接的视图与 Bootstrap CSS 框架兼容 。但是,如果你不使用 Bootstrap,可以自由定义视图来渲染这些链接。在分页器实例中调用 ` links ` 方法时,只需将视图名称作为第一个参数传递给方法 :
155158
156159 {{ $paginator->links('view.name') }}
157160
158161 // Passing data to the view...
159162 {{ $paginator->links('view.name', ['foo' => 'bar']) }}
160163
161- 然而,自定义分页视图最简单的方法是通过 ` vendor:publish ` 命令将它们导出到你的 ` resources/views/vendor ` 目录:
164+ 自定义分页视图的制作最简单的方法是使用 ` vendor:publish ` 命令将它们导出到 ` resources/views/vendor ` 目录:
162165
163166 php artisan vendor:publish --tag=laravel-pagination
164167
165- 这个命令将视图放置在 ` resources/views/vendor/pagination ` 目录中。这个目录下的 ` default.blade.php ` 文件对应于默认分页视图。 你可以简单地编辑这个文件来修改分页的 HTML 。
168+ 这个命令将这些视图放置在 ` resources/views/vendor/pagination ` 目录中。这个目录下的 ` default.blade.php ` 文件对应默认的分页视图, 你可以简单地编辑这个文件来修改分页的 HTML 。
166169
167170<a name =" paginator-instance-methods " ></a >
168171## 分页器实例方法
169172
170- 每个分页器实例通过以下方法提供额外的分页信息 :
173+ 每个分页器实例可以通过以下方法获取额外的分页信息 :
171174
172175- ` $results->count() `
173176- ` $results->currentPage() `
174177- ` $results->firstItem() `
175178- ` $results->hasMorePages() `
176179- ` $results->lastItem() `
177- - ` $results->lastPage() (Not available when using simplePaginate) `
180+ - ` $results->lastPage() ` (使用 simplePaginate 时不可用)
178181- ` $results->nextPageUrl() `
179182- ` $results->perPage() `
180183- ` $results->previousPageUrl() `
181- - ` $results->total() (Not available when using simplePaginate) `
184+ - ` $results->total() ` (使用 simplePaginate 时不可用)
182185- ` $results->url($page) `
183186
184187## 译者署名
185188| 用户名 | 头像 | 职能 | 签名 |
186189| ---| ---| ---| ---|
187- | <br >[ @ChrisonWang ] ( https://github.com/ChrisonWang ) | <img class =" avatar-66 rm-style " src =" https://avatars0.githubusercontent.com/u/16531947?v=4&s=80 " > | <br >翻译 | <br >[ @王欣] ( https://www.linkedin.com/in/ChrisonWang/ ) at LinkedIn|
190+ | <br >[ @ChrisonWang ] ( https://github.com/ChrisonWang ) | <img class =" avatar-66 rm-style " src =" https://avatars0.githubusercontent.com/u/16531947?v=4&s=80 " > | <br >翻译 | <br >[ @王欣] ( https://www.linkedin.com/in/ChrisonWang/ ) at LinkedIn |
191+ | [ @JokerLinly ] ( https://laravel-china.org/users/5350 ) | <img class =" avatar-66 rm-style " src =" https://dn-phphub.qbox.me/uploads/avatars/5350_1481857380.jpg " > | Review | Stay Hungry. Stay Foolish. |
188192
189- ---
193+ ---
190194
191195> {note} 欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
192- >
196+ >
193197> 转载请注明:本文档由 Laravel China 社区 [ laravel-china.org] ( https://laravel-china.org ) 组织翻译,详见 [ 翻译召集帖] ( https://laravel-china.org/topics/5756/laravel-55-document-translation-call-come-and-join-the-translation ) 。
194- >
195- > 文档永久地址: https://d.laravel-china.org
198+ >
199+ > 文档永久地址: https://d.laravel-china.org
0 commit comments