📅  最后修改于: 2023-12-03 15:02:39.249000             🧑  作者: Mango
Laravel 提供了使用简单的分页功能。在许多情况下,开箱即用的分页就已经足够了。但是,当需要更自定义的分页时,Laravel 也为我们提供了一些灵活的选项。
在 Laravel 中,可以使用 paginate
方法对查询结果进行分页。比如,对于 User
模型,可以使用以下代码进行分页:
use App\Models\User;
$users = User::paginate(10);
以上代码将查询 users
数据表中的所有用户数据,并分页每页显示 10 条记录。
在视图中,我们可以通过以下方式显示分页链接:
{{ $users->links() }}
以上代码将在页面中渲染分页链接。Laravel 自动根据当前页和总页数生成正确的链接。
如果要自定义分页链接样式,可以使用 links
方法的第一个参数指定链接样式。比如,以下代码将使用 pagination
类指定分页链接样式:
{{ $users->links('pagination') }}
如果要自定义分页链接的 HTML 代码,可以使用 links
方法的第二个参数指定视图模板。这个视图模板会接收一个 Paginator
实例作为参数。我们可以在视图模板中使用 Paginator
实例中的一些方法,如 currentPage
、hasMorePages
等。
比如,以下代码使用 resources/views/pagination.blade.php
文件自定义分页链接的 HTML 代码:
{{ $users->links('pagination', ['paginator' => $users]) }}
在 pagination.blade.php
文件中,可以按照自己的需要自定义分页链接的 HTML 代码,如下所示:
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation" class="flex justify-between">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<a class="border border-gray-200 bg-gray-200 text-gray-500 cursor-not-allowed px-4 py-2 rounded-md mr-2" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">@lang('pagination.previous')</span>
</a>
@else
<a href="{{ $paginator->previousPageUrl() }}" class="border border-gray-200 bg-white text-gray-500 hover:bg-gray-50 px-4 py-2 rounded-md mr-2" rel="prev" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">@lang('pagination.previous')</span>
</a>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" class="border border-gray-200 bg-white text-gray-500 hover:bg-gray-50 px-4 py-2 rounded-md ml-2" rel="next" aria-label="@lang('pagination.next')">
<span aria-hidden="true">@lang('pagination.next')</span>
</a>
@else
<a class="border border-gray-200 bg-gray-200 text-gray-500 cursor-not-allowed px-4 py-2 rounded-md ml-2" aria-disabled="true" aria-label="@lang('pagination.next')">
<span aria-hidden="true">@lang('pagination.next')</span>
</a>
@endif
</nav>
@endif
在某些情况下,我们可能需要自定义生成查询分页链接的查询语句。Laravel 提供了 withQueryString
和 appends
方法来帮助我们生成自定义查询语句。
比如,以下代码生成自定义查询语句:
$users = DB::table('users')
->where('votes', '>', 100)
->orderBy('name', 'desc')
->paginate(10);
$users->withQueryString()
->appends(['sort' => 'name']);
以上代码将生成类似于 http://example.com?page=2&sort=name
的查询语句。
Laravel 的分页功能提供了多种自定义选项,使我们能够更好地满足项目的需求。在开发中,我们可以根据自己的需要灵活使用这些选项,从而达到最佳的开发效率和用户体验。