首頁 > php框架 > Laravel > 如何使用Laravel實現分頁功能

如何使用Laravel實現分頁功能

PHPz
發布: 2023-04-19 10:38:37
原創
2855 人瀏覽過

Laravel是一款受歡迎的PHP開發框架,提供了許多現代化的特性和便於開發的工具,讓開發者可以更有效率地建立網站和應用程式。在開發Web應用過程中,常常需要將查詢結果分頁展示,這篇文章將介紹如何使用Laravel實現分頁功能。

一、分頁簡介

分頁是指將一份大量數據拆分成多個頁面進行展示的方法,通常情況下我們會設定顯示每頁多少條數據,數據量超過該數值便會自動翻頁。這種方式可以大幅減少頁面的載入時間和佔用頻寬,讓使用者更容易查看和導航資料。

二、Laravel分頁操作

Laravel提供了Paginator類別來實現分頁功能。我們可以將查詢結果物件傳遞給Paginator的make方法,並指定每頁要顯示的資料量,就可以取得分頁實例。在實例上呼叫render方法,Laravel即可自動生成分頁連結。

下面我們來看具體的程式碼實作。

  1. #安裝Laravel

執行以下指令安裝Laravel:

composer create-project --prefer-dist laravel/laravel blog
登入後複製
  1. 建立Mysql資料庫表
## 創建資料庫表articles,並插入一些樣本資料:

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;
登入後複製
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');
登入後複製
    定義Article模型
在app/Models目錄下建立Article.php文件,並新增以下程式碼:

<?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->format('Y-m-d');
    }
}
登入後複製
    定義ArticlesController
在app/Http/Controllers目錄下建立ArticlesController.php文件,並新增以下程式碼:

<?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;));
    }
}
登入後複製

    建立Articles視圖
在resources/views目錄下建立articles目錄,在該目錄下建立index.blade.php文件,並新增以下程式碼:

@extends(&#39;layouts.app&#39;)
@section(&#39;content&#39;)
    <div class="container">
        <div class="row">
            <div class="col-md-8">
                @foreach($articles as $article)
                    <div class="card mb-3">
                        <div class="card-header">
                            {{ $article->title }}
                        </div>
                        <div class="card-body">
                            <p class="card-text">{{ $article->body }}</p>
                        </div>
                        <div class="card-footer text-right">
                            <small class="text-muted">{{ $article->date }}</small>
                        </div>
                    </div>
                @endforeach
                {{ $articles->links() }}
            </div>
        </div>
    </div>
@endsection
登入後複製
分析:

    首先我們foreach循環展示每一篇文章。
  • 使用$article->title和$article->body屬性從Article模型中取得文章標題和正文。
  • 在$article->date屬性中取得文章發佈日期。
  • 呼叫$articles->links()方法,Laravel會自動為我們生成分頁連結。
    定義頁面樣式
在public/css目錄下建立app.css文件,並新增以下程式碼:

.card {
    margin-bottom: 20px;
}
.pagination {
    margin-top: 20px;
}
登入後複製
在resources /views/layouts目錄下的檔案app.blade.php中,加入以下程式碼:

<!doctype html>
<html lang="{{ str_replace(&#39;_&#39;, &#39;-&#39;, app()->getLocale()) }}">
<head>
    <!-- Meta Tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{{ config('app.name') }}</title>
    <!-- Styles -->
    <link href="{{ asset(&#39;css/app.css&#39;) }}" rel="stylesheet">
</head>
<body>
    <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
        <div class="container">
            <a class="navbar-brand" href="{{ url(&#39;/&#39;) }}">
                {{ config('app.name') }}
            </a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __(&#39;Toggle navigation&#39;) }}">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav mr-auto"></ul>
                <ul class="navbar-nav ml-auto"></ul>
            </div>
        </div>
    </nav>
    @yield('content')
    <script src="{{ asset(&#39;js/app.js&#39;) }}"></script>
</body>
</html>
登入後複製
分析:

    在app.blade.php中加入了Bootstrap4的CSS樣式。
  • 我們還引入了Bootstrap4的JS文件,但是我們並不需要自己手動引入,因為Laravel自帶了Webpack打包工具,這個工具可以自動將所需的JS文件打包到public/js/app .js檔案中。
    測試分頁功能
訪問http://127.0.0.1:8000/articles可以看到我們的文章清單已經展示出來了,而且我們可以透過分頁連結的方式在多個頁面之間切換。

在這裡要注意的是,我們在控制器中呼叫paginate方法時,傳入的參數2代表了一頁要顯示幾條數據,如果這個值設定得太小,則頁面上的分頁連結會很多,導致頁面混亂;如果這個值設定得太大,則頁面展示的資料量會很大,長時間阻塞請求,影響頁面的開啟速度,甚至會導致記憶體溢出等問題,所以要根據實際情況謹慎設置。

三、總結

Laravel提供了強大的Paginator類別來實現分頁功能,只需要使用較少的程式碼即可輕鬆實現。本文介紹如何使用Paginator來分頁展示MySQL資料庫中的資料。我們也展示瞭如何在分頁結果中使用模型屬性。當我們需要在開發網站和應用程式時展示大量資料時,分頁是必不可少的功能,它不僅可以極大的提高用戶體驗,還能有效地減輕伺服器的開銷。

以上是如何使用Laravel實現分頁功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板