如何在 Laravel Eloquent 中通过分页高效处理大型数据集?

问题描述 投票:0回答:1

我正在开发一个 Laravel 应用程序,该应用程序从数据库中检索大型数据集。
目前,我正在一次获取所有结果,但这会导致性能问题。我想实现分页以以较小的块显示数据。使用 Laravel Eloquent 及其关系实现这一目标的最有效方法是什么?

我尝试过的: 我尝试一次获取所有结果并将它们限制在视图中,但这对于大型数据集来说很慢。

预期结果: 我想使用 Eloquent 实现服务器端分页,仅检索当前页面必需的数据,从而提高性能和用户体验

laravel performance eloquent pagination
1个回答
0
投票

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">&lsaquo;</span>
            </li>
        @else
            <li class="page-item">
                <a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</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')">&rsaquo;</a>
            </li>
        @else
            <li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
                <span class="page-link" aria-hidden="true">&rsaquo;</span>
            </li>
        @endif
    </ul>
@endif

在您的刀片文件中:

{{ $users->links('components/custom-pagination') }}
© www.soinside.com 2019 - 2024. All rights reserved.