>  기사  >  PHP 프레임워크  >  laravel에서 페이징 기능을 수동으로 구현하는 방법을 설명하는 예

laravel에서 페이징 기능을 수동으로 구현하는 방법을 설명하는 예

PHPz
PHPz원래의
2023-04-14 09:43:521035검색

Laravel은 PHP로 작성된 무료 오픈 소스 웹 애플리케이션 프레임워크입니다. 간단한 구문, 아름다운 디자인, 강력한 확장성으로 인해 오랫동안 웹 개발 분야의 표준 중 하나로 자리매김해 왔으며 대다수 개발자의 환영을 받아왔습니다.

그리고 라라벨만의 페이지 매김 방식인 Paginator도 특징 중 하나입니다. 그러나 때로는 특별한 요구 사항을 충족하기 위해 페이징을 수동으로 구현해야 하는 경우도 있습니다. 그럼 페이징 기능을 수동으로 구현하는 방법을 자세히 소개하겠습니다.

준비

페이징을 수동으로 구현하기 전에 조명/지원이라는 Laravel 구성 요소를 설치해야 합니다. 이 패키지는 작지만 중요한 보조 기능을 제공합니다. Composer를 통해 설치할 수 있습니다:

composer require illuminate/support

설치가 완료된 후 Laravel 프로젝트의 config/app.php 파일에 공급자를 추가해야 합니다:

'providers' => [
    // ...
    Illuminate\Support\ServiceProvider::class,
    // ...
],

이러한 방법으로 다음에서 제공하는 페이징 기능을 사용할 수 있습니다. 라라벨.

페이징 수동 구현

라라벨 고유의 Paginator 메소드를 사용하여 쿼리 결과를 페이징할 수 있지만, 이로 인해 데이터베이스에 두 번 쿼리가 발생하고 때로는 수동 구현만큼 성능이 좋지 않을 수도 있습니다. 수동 페이징을 구현하는 방법은 Laravel에서 제공하는 Collection 구현을 사용하는 것입니다.

먼저 전달된 매개변수를 정의합니다. $perPage는 각 페이지에 표시되는 항목 수를 나타내고 $page는 현재 페이지 번호를 나타냅니다.

public function manualPaginate($perPage, $page)
{
    $records = DB::table('table_name')->get(); // 从数据库中取出所有记录

    $total = count($records); // 根据记录总数获取总条数

    $start = ($page - 1) * $perPage; // 获取这一页的起始位置

    $records = collect($records); // 将获取的记录转换成 Collection 类型

    $pageData = $records->slice($start, $perPage); // 获取这一页的记录

    $paginator = new LengthAwarePaginator( // 将分页数据封装成分页器
        $pageData,
        $total,
        $perPage,
        $page,
        [
            'path' => LengthAwarePaginator::resolveCurrentPath(), // 当前页的 URL 地址
            'pageName' => 'page',
        ]
    );

    return $paginator; // 返回分页器对象
}

위 코드에서는 먼저 데이터베이스에서 모든 레코드를 가져온 다음 총 레코드 수를 통해 총 레코드 수를 얻은 다음 이 페이지의 시작 위치와 이 페이지의 레코드를 가져와서 변환합니다. 수집된 레코드를 Collection 유형으로 변환한 다음 LengthAwarePaginator 클래스를 통해 페이징 데이터를 페이저에 캡슐화하고 마지막으로 페이저 개체를 반환합니다.

뷰에서 다음과 같은 방법으로 페이지네이터의 요소를 얻을 수 있습니다:

{{-- 获取分页数据 --}}
@foreach ($paginator as $item)
    <tr>
        <td>{{ $item->id }}</td>
        <td>{{ $item->name }}</td>
        <td>{{ $item->email }}</td>
    </tr>
@endforeach

{{-- 获取分页链接 --}}
{{ $paginator->links() }}

이 시점에서 페이징 기능을 수동으로 구현했습니다. 물론 이는 단순한 예시일 뿐 실제 상황에서는 더욱 복잡한 처리 로직이 필요할 수 있다. 그러나 이 간단한 구현을 통해 수동 페이징의 원리를 더 깊이 이해할 수 있으며 실제 프로젝트에서 페이징 기능을 사용자 정의하기 위한 몇 가지 아이디어를 제공할 수도 있습니다.

위 내용은 laravel에서 페이징 기능을 수동으로 구현하는 방법을 설명하는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.