Home > PHP Framework > Laravel > body text

Example to explain how to manually implement paging function in laravel

PHPz
Release: 2023-04-14 09:46:32
Original
1050 people have browsed it

Laravel is a free, open source web application framework written in PHP. It has long become one of the standards in the field of web development. With its simple syntax, beautiful design and powerful scalability, it has been welcomed by the majority of developers.

And Laravel’s own paging method Paginator is also one of its special features. However, sometimes we need to manually implement paging to meet special needs. So, let’s introduce in detail how to manually implement the paging function.

Preparation

Before starting to implement paging manually, we need to install a Laravel component called illuminate/support. This package provides some small but important auxiliary functions. It can be installed through Composer:

composer require illuminate/support
Copy after login

After the installation is completed, we need to add the provider in the config/app.php file of the Laravel project:

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

In this way, we can use the provided by Laravel Pagination function.

Manually implement paging

You can use Laravel's own Paginator method to paginate the query results, but this will cause the database to be queried twice, and sometimes the performance may not be as good as manual implementation. The way to implement manual paging is to use the Collection implementation provided by Laravel.

First, we define the parameters passed in: $perPage represents the number of items displayed on each page, and $page represents the current page number.

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; // 返回分页器对象
}
Copy after login

In the above code, we first fetch all the records from the database, then get the total number of records through the total number of records, and then get the starting position of this page and the records of this page, we will get The records are converted into Collection type, and then the paging data is encapsulated into a pager through the LengthAwarePaginator class, and finally the pager object is returned.

In the view, you can get the elements of the paginator in the following ways:

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

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

At this point, we have manually implemented the paging function. Of course, this is just a simple example, and more complex processing logic may be required in actual situations. However, through this simple implementation, we can have a deeper understanding of the principles of manual paging, and it can also provide us with some ideas for customizing the paging function in actual projects.

The above is the detailed content of Example to explain how to manually implement paging function in laravel. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template