我正在开发一个 Laravel 应用程序,该应用程序从数据库中检索大型数据集。
目前,我正在一次获取所有结果,但这会导致性能问题。我想实现分页以以较小的块显示数据。使用 Laravel Eloquent 及其关系实现这一目标的最有效方法是什么?
我尝试过的: 我尝试一次获取所有结果并将它们限制在视图中,但这对于大型数据集来说很慢。
预期结果: 我想使用 Eloquent 实现服务器端分页,仅检索当前页面必需的数据,从而提高性能和用户体验
Laravel 通过其内置的分页功能使分页变得非常简单。以下是如何使用 Laravel 分页:
内部控制器:
$users = User::paginate(10); // 10 items per page
return view('users.index', ['users' => $users]);
自定义分页链接: 在视图中创建自定义分页组件
@if ($paginator->hasPages())
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">‹</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">›</span>
</li>
@endif
</ul>
@endif
在您的刀片文件中:
{{ $users->links('components/custom-pagination') }}