쪽수 매기기
ㅋㅋ
Eloquent Pagination
- 수동으로 페이지 매기기 만들기
- 페이지가 매겨진 결과 표시
- 변환 결과를 JSON으로
- 사용자 지정 페이지 매기기 보기
Paginator 인스턴스 메서드소개
다른 프레임워크에서는 페이지 매김이 어려울 수 있습니다. Laravel의 페이지네이터는 쿼리 빌더와 Eloquent ORM을 결합하여 데이터베이스 결과 세트의 편리하고 사용하기 쉬운 페이지 매김을 제공합니다. 페이지네이터를 통해 생성된 HTML은 Bootstrap CSS 프레임워크와 호환됩니다.
기본 사용법
Query Builder 페이지 매기기
데이터 페이지 매기기에는 여러 가지 방법이 있습니다. 가장 간단한 방법은 쿼리 빌더나 Eloquent 쿼리의
paginate
메소드를 사용하는 것입니다.paginate
메소드는 사용자가 탐색한 현재 페이지 번호를 기반으로 적절한 오프셋 오프셋과 제한 번호를 자동으로 설정합니다. 기본적으로 HTTP 요청의page
쿼리 매개변수 값은 현재 페이지의 페이지 번호로 처리됩니다. Lavarel은 이 값을 자동으로 감지하여 페이지네이터가 생성한 링크에 자동으로 삽입합니다.paginate
方法。paginate
方法根据用户浏览的当前页码,自动设置恰当的偏移量 offset 和限制数 limit。默认情况下,HTTP 请求中的page
查询参数值被当作当前页的页码。Lavarel 自动侦测该值,并自动将其插入到分页器生成的链接中。在下面的例子中,传递给
paginate
方法的唯一参数是你希望在每页显示的记录条数。在此处,我们指定要在每页显示15
条数据:<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\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]); } }
{note} 目前,Lavarel 无法高效地执行使用了
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
paginate
메소드에 전달된 유일한 매개변수는 각 페이지에 표시하려는 레코드 수입니다. 여기서는 페이지당15
개의 데이터를 표시하도록 지정합니다.$users = User::where('votes', '>', 100)->simplePaginate(15);
{note} 현재 Lavarel은
groupBy
를 사용하는 작업을 효율적으로 수행할 수 없습니다. 문 페이징 작업입니다.groupBy
를 사용하여 결과 집합에 페이지를 매겨야 하는 경우 데이터베이스를 수동으로 쿼리하고 페이지 매기기를 만드는 것이 좋습니다.간단한 페이징
페이징에 "다음 페이지"와 "다음 페이지"만 표시해야 하는 경우 이전 페이지 링크를 보려면simplePaginate
메소드를 사용하여 보다 효율적인 쿼리를 수행할 수 있습니다. 이는 데이터가 많고 뷰를 렌더링할 때 각 페이지의 페이지 번호를 표시할 필요가 없을 때 유용합니다.<div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
🎜🎜🎜🎜🎜Eloquent paging🎜🎜 Eloquent 쿼리 결과에 페이지를 매길 수도 있습니다. 아래 예에서는 페이지당15
항목씩User
모델의 페이지를 매깁니다. 보시다시피 구문은 기본적으로 쿼리 빌더 페이지 매김과 동일합니다. 🎜Route::get('users', function () { $users = App\User::paginate(15); $users->withPath('custom/url'); // });
🎜페이지 매기기
를 호출하기 전에 쿼리에서where
절과 같은 다른 제약 조건을 설정할 수도 있습니다. 🎜{{ $users->appends(['sort' => 'votes'])->links() }}
🎜 Eloquent 페이지 매김에서simplePaginate
메소드를 사용할 수도 있습니다: 🎜{{ $users->fragment('foo')->links() }}
🎜🎜🎜🎜🎜🎜수동으로 페이지 매기기 만들기
때때로 페이지 매기기를 수동으로 만들고 이를 배열 세트에 전달하고 싶을 수도 있습니다. 이는 필요에 따라
IlluminatePaginationPaginator
또는IlluminatePaginationLengthAwarePaginator
의 인스턴스를 생성하여 수행할 수 있습니다. .IlluminatePaginationPaginator
或IlluminatePaginationLengthAwarePaginator
实例来实现,这有赖于你的需要。.Paginator
类不需要知道结果集的总数;但是,这样一来,这个类就没办法获知最后一页的索引。LengthAwarePaginator
接受和Paginator
几乎相同的参数;不过,它会计算结果集的总数。换句话说,
Paginator
相当于 查询构造器 或 Eloquent 的simplePaginate
方法,而LengthAwarePaginator
相当于paginate
方法。{note} 在手动创建分页实例时,需要人为 “切割” 传递给分页实例的结果数组。如果你对此没有把握,请参考 PHP 的 array_slice 函数。
显示结果集
调用
paginate
方法时,会得到IlluminatePaginationLengthAwarePaginator
实例。调用simplePaginate
方法,得到的是IlluminatePaginationPaginator
实例。这些对象提供了分析结果集的几个方法。 除了这些辅助方法,分页器实例合为迭代器,可以像数组一样循环。因此,当得到结果后,可以使用 Blade 显示数据、渲染分页链接:{{ $users->onEachSide(5)->links() }}
links
方法渲染结果集中剩余页面的链接。每个链接都包含page
URL 变量。记住,links
生成的 HTML 兼容 Bootstrap CSS 框架。自定义分页器 URI
withPath
方法允许你在生成分页链接时自定义 URI 。例如,如果你想生成形如http://example.com/custom/url?page=N
的分页链接,只需要传递custom/url
参数给withPath
方法:Route::get('users', function () { return App\User::paginate(); });
附加参数到分页链接
可以使用
appends
方法,向分页链接中添加查询参数。例如,要在每页链接中添加sort=votes
,只需要这样调用appends
:{ "total": 50, "per_page": 15, "current_page": 1, "last_page": 4, "first_page_url": "http://laravel.app?page=1", "last_page_url": "http://laravel.app?page=4", "next_page_url": "http://laravel.app?page=2", "prev_page_url": null, "path": "http://laravel.app", "from": 1, "to": 15, "data":[ { // 结果集对象 }, { // 结果集对象 } ] }
如果想要向分页器 URL 添加 “哈希片段”,可以使用
fragment
方法。例如,要在每页链接中添加#foo
,只要这样调用fragment
Paginator
클래스는 결과 세트의 총 개수를 알 필요가 없습니다. 그러나 이 클래스는 마지막 페이지의 인덱스를 알 수 있는 방법이 없습니다.LengthAwarePaginator
는Paginator
와 거의 동일한 매개변수를 허용하지만 결과 세트의 총 개수를 계산합니다. 즉,Paginator
는 쿼리 빌더 또는 Eloquent의simplePaginate
메소드와 동일하고LengthAwarePaginator
는paginate
와 동일합니다. 코드 > 메소드. 🎜🎜{note} 페이징 인스턴스를 수동으로 생성하는 경우 페이징 인스턴스에 전달된 결과 배열을 수동으로 "자르기"해야 합니다. 이에 대해 확실하지 않은 경우 PHP의 array_slice 함수를 참조하세요. 🎜
🎜🎜🎜결과 집합 표시
🎜paginate
메서드가 호출되면IlluminatePaginationLengthAwarePaginator
인스턴스가 획득됩니다.simplePaginate
메서드를 호출하고IlluminatePaginationPaginator
인스턴스를 가져옵니다. 이러한 개체는 결과 집합을 분석하기 위한 여러 가지 방법을 제공합니다. 이러한 도우미 메서드 외에도 호출기 인스턴스는 배열처럼 반복될 수 있는 반복기로 결합됩니다. 따라서 결과를 얻으면 Blade를 사용하여 데이터를 표시하고 페이징 링크를 렌더링할 수 있습니다. 🎜{{ $paginator->links('view.name') }} // Passing data to the view... {{ $paginator->links('view.name', ['foo' => 'bar']) }}
🎜links
메서드를 사용하여 결과 집합의 나머지 페이지에 대한 링크를 렌더링할 수 있습니다. 각 링크에는page
URL 변수가 포함되어 있습니다.링크
로 생성된 HTML은 부트스트랩 CSS 프레임워크와 호환된다는 점을 기억하세요. 🎜🎜사용자 정의 페이지 매기기 URI
🎜withPath
메소드를 사용하면 페이지 매기기 링크를 생성할 때 URI를 사용자 정의할 수 있습니다. 예를 들어http://example.com/custom/url?page=N
과 같이 페이지가 매겨진 링크를 생성하려면custom/url
매개변수를 < code>withPath 메서드: 🎜php artisan vendor:publish --tag=laravel-pagination
🎜페이징 링크에 매개변수 추가
🎜추가
페이지 매김 링크에 쿼리 매개변수를 추가하는 방법입니다. 예를 들어 모든 페이지 링크에sort=votes
를 추가하려면appends
를 호출하세요.🎜use Illuminate\Pagination\Paginator;public function boot(){ Paginator::defaultView('view-name'); Paginator::defaultSimpleView('view-name'); }
🎜페이지네이터 URL에 "해시 조각"을 추가하려면fragment
메소드를 사용할 수 있습니다. 예를 들어 모든 페이지 링크에#foo
를 추가하려면 다음과 같이fragment
메서드를 호출하면 됩니다. 🎜rrreee🎜🎜페이지 매김 링크 창 크기 조정
페이지 매기기 "창"의 각 측면에 표시되는 사이트링크 수를 제어할 수 있습니다. 기본적으로 기본 페이지 매기기 링크의 각 측면에는 세 개의 링크가 나타납니다. 이 값은
rrreeeonEachSide
메서드를 사용하여 변경할 수 있습니다:onEachSide
方法改变这个数值:将结果转换为 JSON
Laravel 分页器类实现了
rrreeeIlluminateContractsSupportJsonable
接口契约,提供了toJson
方法,能够方便地将分页结果转换为 JSON 。还可以通过自路由或控制器操作返回分页器实例来将其转换为 JSON :来自分页器的 JSON 将包括诸如
rrreeetotal
,current_page
,last_page
等元数据信息。实际结果对象将通过 JSON 数组的data
键提供。以下是通过自路由中返回分页器实例的方式创建 JSON 的例子:自定义分页视图
默认情况下,渲染视图以显示分页链接与 Bootstrap CSS 框架兼容。如果你不使用 Bootstrap,可以随心所欲地定制自己的视图来渲染这些链接。在调用分页器实例的
rrreeelinks
方法时,将视图名称作为传递给它的第一个参数:自定义分页视图的最简方法是使用
rrreeevendor:publish
命令将它们输出到resources/views/vendor
文件夹:此命令将在
resources/views/vendor/pagination
文件夹放置这些视图。内置在该文件夹下的bootstrap-4.blade.php
文件提供了默认的分页视图。可以编辑此文件以修改分页 HTML。如果想要定义不同的文件作为默认分页视图,需要在
AppServiceProvider
中使用分页器的defaultView
和defaultSimpleView
rrreee결과를 JSON으로 변환
Laravel 페이지네이터 클래스는IlluminateContractsSupportJsonable
인터페이스 계약을 구현하고 페이징을 쉽게 변환할 수 있는toJson
메서드를 제공합니다. 결과를 JSON으로 변환합니다. 경로 또는 컨트롤러 작업에서 호출기 인스턴스를 반환하여 JSON으로 변환할 수도 있습니다.rrreee호출기의 JSON에는total
,current_page
, < code>last_page 및 기타 메타데이터 정보. 실제 결과 객체는 JSON 배열의data
키를 통해 제공됩니다. 다음은 경로에서 페이지 매김 인스턴스를 반환하여 JSON을 생성하는 예입니다. 🎜rrreee🎜🎜🎜🎜사용자 정의 페이지 매김 보기
🎜기본적으로 페이지 매김 링크를 표시하기 위해 보기를 렌더링하는 것은 Bootstrap CSS 프레임워크와 호환됩니다. Bootstrap을 사용하지 않는 경우 자유롭게 자신만의 보기를 사용자 정의하여 이러한 링크를 렌더링할 수 있습니다. 페이지네이터 인스턴스의links
메소드를 호출할 때 뷰 이름을 첫 번째 인수로 전달하십시오. 🎜rrreee🎜페이지 매김 뷰를 사용자 정의하는 가장 쉬운 방법은vendor:publish<를 사용하는 것입니다. code> 명령은
및resources/views/vendor
폴더에 출력합니다. 🎜rrreee🎜이 명령은 이러한 뷰를resources/views/vendor/pagination
폴더에 배치합니다. 이 폴더에 내장된bootstrap-4.blade.php
파일은 기본 페이지 매김 보기를 제공합니다. 이 파일을 편집하여 페이지 매김 HTML을 수정할 수 있습니다. 🎜🎜다른 파일을 기본 페이징 보기로 정의하려면AppServiceProvider
defaultViewdefaultSimpleView
메서드를 사용해야 합니다. >: 🎜rrreee 🎜🎜🎜🎜🎜🎜Paginator 인스턴스 메서드
각 Paginator 인스턴스는 추가 페이징 정보를 얻기 위해 다음 메서드를 제공합니다.
Method Description $results->count()
현재 페이지의 데이터 수를 가져옵니다. $results->count()
获取当前页数据数量。 $results->currentPage()
获取当前页页码。 $results->firstItem()
获取结果集中第一条数据的结果编号。 $results->getOptions()
获取分页器选项。 $results->getUrlRange($start, $end)
创建分页 URL 范围。 $results->hasMorePages()
是否有多页。 $results->lastItem()
获取结果集中最后一条数据的结果编号。 $results->lastPage()
获取最后一页的页码(在 simplePaginate
中无效)。$results->nextPageUrl()
获取下一页的 URL 。 $results->onFirstPage()
当前而是否为第一页。 $results->perPage()
每页的数据条数。 $results->previousPageUrl()
获取前一页的 URL。 $results->total()
数据总数(在 simplePaginate
🎜🎜$results->currentPage()
현재 페이지 번호를 가져옵니다. 🎜🎜🎜$results->firstItem()
결과 세트에서 첫 번째 데이터 조각의 결과 번호를 가져옵니다. 🎜🎜🎜$results->getOptions()
페이지네이터 옵션을 받으세요. 🎜🎜🎜$results->getUrlRange($start, $end)
페이지가 매겨진 URL 범위를 만듭니다. 🎜🎜🎜$results->hasMorePages()
여러 페이지가 있는지 여부. 🎜🎜🎜$results->lastItem()
결과 세트에서 마지막 데이터 조각의 결과 번호를 가져옵니다. 🎜🎜🎜$results->lastPage()
마지막 페이지의 페이지 번호를 가져옵니다( 🎜🎜🎜simplePaginate
에서는 유효하지 않음).$results->nextPageUrl()
다음 페이지의 URL을 가져옵니다. 🎜🎜🎜$results->onFirstPage()
현재 및 첫 번째 페이지인지 여부. 🎜🎜🎜$results->perPage()
페이지당 데이터 항목 수입니다. 🎜🎜🎜$results->previousPageUrl()
이전 페이지의 URL을 가져옵니다. 🎜🎜🎜$results->total()
총 데이터 수입니다( simplePaginate
에서는 유효하지 않음).$results->url($page)
지정된 페이지의 URL을 가져옵니다.