如何使用Laravel实现分页功能

laravel是一款流行的php开发框架,提供了许多现代化的特性和便于开发的工具,让开发者可以更加高效地构建网站和应用程序。在开发web应用过程中,常常需要将查询结果分页展示,这篇文章将介绍如何使用laravel实现分页功能。

一、分页简介

分页是指将一份大量数据拆分成多个页面进行展示的方法,通常情况下我们会设置显示每页多少条数据,数据量超过该值便会自动翻页。这种方式可以大大减少页面的加载时间和占用带宽,让用户更容易地查看和导航数据。

二、Laravel分页操作

Laravel提供了Paginator类来实现分页功能。我们可以将查询结果对象传递给Paginator的make方法,并指定每页要显示的数据量,就可以获取分页实例。在实例上调用render方法,Laravel即可自动生成分页链接。

下面我们来看具体的代码实现。

  1. 安装Laravel

运行以下命令安装Laravel:

1

composer create-project --prefer-dist laravel/laravel blog

  1. 创建Mysql数据库表

创建数据库表articles,并插入一些样本数据:

1

2

3

4

5

6

7

8

CREATE TABLE `articles` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,

  `body` text COLLATE utf8mb4_unicode_ci NOT NULL,

  `created_at` timestamp NULL DEFAULT NULL,

  `updated_at` timestamp NULL DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

1

2

3

4

INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 1''This is article 1 content''2021-01-01 12:00:00''2021-01-01 12:00:00');

INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 2''This is article 2 content''2021-01-02 12:00:00''2021-01-02 12:00:00');

INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 3''This is article 3 content''2021-01-03 12:00:00''2021-01-03 12:00:00');

INSERT INTO `articles` (`title`, `body`, `created_at`, `updated_at`) VALUES ('Article 4''This is article 4 content''2021-01-04 12:00:00''2021-01-04 12:00:00');

  1. 定义Article模型

在app/Models目录下创建Article.php文件,并添加以下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Article extends Model

{

    use HasFactory;

    protected $fillable = [&#39;title&#39;, &#39;body&#39;];

    public function getDateAttribute()

    {

        return $this->created_at-&gt;format('Y-m-d');

    }

}

  1. 定义ArticlesController

在app/Http/Controllers目录下创建ArticlesController.php文件,并添加以下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Article;

class ArticlesController extends Controller

{

    public function index(Request $request)

    {

        $articles = Article::paginate(2);

         

        return view(&#39;articles.index&#39;, compact(&#39;articles&#39;));

    }

}

  1. 创建Articles视图

在resources/views目录下创建articles目录,在该目录下创建index.blade.php文件,并添加以下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

@extends('layouts.app')

@section('content')

    <div>

        <div>

            <div>

                @foreach($articles as $article)

                    <div>

                        <div>

                            {$article-&gt;title }}

                        </div>

                        <div>

                            <p>{$article-&gt;body }}</p>

                        </div>

                        <div>

                            <small>{$article-&gt;date }}</small>

                        </div>

                    </div>

                @endforeach

                {$articles-&gt;links() }}

            </div>

        </div>

    </div>

@endsection

分析:

  • 首先我们foreach循环展示每一篇文章。
  • 使用$article->title和$article->body属性从Article模型中获取文章标题和正文。
  • 在$article->date属性中获取文章发布日期。
  • 调用$articles->links()方法,Laravel会自动为我们生成分页链接。
  1. 定义页面样式

在public/css目录下创建app.css文件,并添加以下代码:

1

2

3

4

5

6

.card {

    margin-bottom: 20px;

}

.pagination {

    margin-top: 20px;

}

在resources/views/layouts目录下的文件app.blade.php中,加入以下代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

nbsp;html&gt;

getLocale()) }}"&gt;

    <!-- Meta Tags -->

    <meta>

    <meta>

    <title>{{ config('app.name') }}</title>

    <!-- Styles -->

    <link>

    <nav>

        <div>

            <a>

                {{ config('app.name') }}

            </a>

            <button>

                <span></span>

            </button>

            <div>

                <ul></ul>

                <ul></ul>

            </div>

        </div>

    </nav>

    @yield('content')

    <script></script>

分析:

  • 在app.blade.php中加入了Bootstrap4的CSS样式。
  • 我们还引入了Bootstrap4的JS文件,但是我们并不需要自己手动引入,因为Laravel自带了Webpack打包工具,这个工具可以自动将所需的JS文件打包到public/js/app.js文件中。
  1. 测试分页功能

访问http://127.0.0.1:8000/articles可以看到我们的文章列表已经展示出来了,而且我们可以通过分页链接的方式在多个页面之间切换。

在这里需要注意的是,我们在控制器中调用paginate方法时,传入的参数2代表了一页要显示几条数据,如果这个值设置得过小,则页面上的分页链接会很多,导致页面混乱;如果这个值设置得过大,则页面展示的数据量会很大,长时间阻塞请求,影响页面的打开速度,甚至会导致内存溢出等问题,所以要根据实际情况谨慎设置。

三、总结

Laravel提供了强大的Paginator类来实现分页功能,只需要使用较少的代码即可轻松实现。本文介绍了如何使用Paginator来分页展示MySQL数据库中的数据。我们还展示了如何在分页结果中使用模型属性。当我们需要在开发网站和应用程序时展示大量数据时,分页是必不可少的功能,它不仅可以极大的提高用户体验,还能有效地减轻服务器的开销。

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值