Laravel 8 使用示例將數(shù)據(jù)導(dǎo)出為 Excel 文件

言鼎科技 2023-07-01 410

我們已經(jīng)看過一些針對初學(xué)者的 Laravel 教程,并且通過我們的一篇博客文章,我們收到了一個(gè)查詢 - Laravel 8 導(dǎo)出數(shù)據(jù) excel 文件和示例。所以這里我們有另一個(gè) Laravel 教程!

在Laravel 8 將數(shù)據(jù)導(dǎo)出為 excel 文件的分步指南中,我們將構(gòu)建一個(gè)演示應(yīng)用程序,我們將在其中使用 maatwebsite/excel 包導(dǎo)出數(shù)據(jù)。您可能熟悉這個(gè)包;它提供了將數(shù)據(jù)導(dǎo)出為 CSV 文件或 Excel 文件的最佳方式。

我們將構(gòu)建一個(gè)演示應(yīng)用程序,我們將在其中了解如何使用 maatwebsite/excel 包在 Laravel 中實(shí)現(xiàn) Excel 導(dǎo)出功能。

教程目標(biāo):Laravel 8 使用示例將數(shù)據(jù)導(dǎo)出為 Excel 文件

在開始開發(fā)部分之前,讓我們看一下下面的視頻,以便您了解我們將在此博客中構(gòu)建什么。

使用遷移創(chuàng)建模型

運(yùn)行此命令以創(chuàng)建模態(tài)


php artisan make:model 學(xué)生-m 

// 學(xué)生.php


<? PHP  命名空間 App\Models;  使用 Illuminate\Database\Eloquent\Factories\HasFactory; 使用 Illuminate\Database\Eloquent\Model;  類學(xué)生擴(kuò)展模型 {     使用 HasFactory;      公共 $fillable = [         'ID',         '姓名',         '電子郵件',         '城市'     ]; } 

這里我們必須存儲學(xué)生數(shù)據(jù)以創(chuàng)建一個(gè)表并定義表的字段。

創(chuàng)建數(shù)據(jù)表

轉(zhuǎn)到數(shù)據(jù)庫/遷移文件夾,然后打開遷移文件并編寫以下代碼。

// 2021_07_16_041455_create_students_table


<?php 使用 Illuminate\Database\Migrations\Migration; 使用 Illuminate\Database\Schema\Blueprint; 使用 Illuminate\Support\Facades\Schema;   類 CreateStudentsTable 擴(kuò)展遷移 {     /**      * 運(yùn)行遷移。      *      * @return 無效      */     公共功能向上()     {         Schema::create('students', function (Blueprint $table) {             $表->id();             $table->string('名字');             $table->string('電子郵件');             $table->string('城市');             $表->時(shí)間戳();         });     }     /**      * 反轉(zhuǎn)遷移。      *      * @return 無效      */     公共功能向下()     {         Schema::dropIfExists('學(xué)生');     } } 

我們將使用上述字段創(chuàng)建一個(gè)表。

現(xiàn)在運(yùn)行這個(gè)命令。此命令對于在 GUI 中創(chuàng)建實(shí)際表和遷移數(shù)據(jù)庫中的表很有用。


php 工匠遷移 

安裝 maatwebsite/excel 包

要安裝 maatwebsite/excel,運(yùn)行下面提到的命令


composer 需要 maatwebsite/excel。 

借助這個(gè)包,我們可以將數(shù)據(jù)導(dǎo)出到 excel 文件中。

現(xiàn)在打開config/app.php并添加服務(wù)提供商和別名。


'供應(yīng)商'=> [       ....      Maatwebsite\Excel\ExcelServiceProvider::class, ], '別名'=> [       ....      'Excel' => Maatwebsite\Excel\Facades\Excel::class, ], 

定義路線

在我們的演示應(yīng)用程序中導(dǎo)航用于定義路由的網(wǎng)頁需要路由,打開 routes/web.php,并使用以下代碼。

// 網(wǎng)頁.php


Route::resource('student', StudentController::class); Route::get('student_export',[StudentController::class, 'get_student_data'])->name('student.export');

創(chuàng)建導(dǎo)出類

在本節(jié)中,我們將創(chuàng)建一個(gè)導(dǎo)出類并定義它所連接的模型。maatwebsite 包提供了一種構(gòu)建導(dǎo)出類的方法,以便我們可以在控制器中進(jìn)一步使用它。

運(yùn)行以下命令。


php artisan make:export StudentExport --model=學(xué)生 

這里StudentExport類將定義我們要在 excel 文件中導(dǎo)出的數(shù)據(jù)。

轉(zhuǎn)到app/Exports/StudentExport.php并在您的代碼中進(jìn)行以下更改

// 學(xué)生導(dǎo)出.php


<?php 命名空間 App\Exports;   使用 App\Models\Student; 使用 Maatwebsite\Excel\Concerns\WithHeadings; 使用 Maatwebsite\Excel\Concerns\FromCollection;   類 StudentExport 實(shí)現(xiàn) FromCollection、WithHeadings {     /**     * @return \Illuminate\Support\Collection     */     公共功能標(biāo)題():數(shù)組{         返回[             'ID',             '姓名',             '電子郵件',             '城市',             '創(chuàng)建時(shí)間',             '更新時(shí)間'         ];     }     公共函數(shù)集合()     {         返回學(xué)生::所有();     } } 

heading ()函數(shù)將定義標(biāo)題,該標(biāo)題將顯示在 excel 文件中。

collection ()方法將返回我們必須導(dǎo)出的數(shù)據(jù)。在我們的演示應(yīng)用程序中,我們將使用學(xué)生模型導(dǎo)出所有學(xué)生數(shù)據(jù)。

創(chuàng)建控制器

在創(chuàng)建控制器之前,我們必須發(fā)出請求。

創(chuàng)建請求的命令。


php artisan make::請求 StoreStudentRequest 

以下是適用于輸入學(xué)生數(shù)據(jù)的驗(yàn)證規(guī)則。


公共功能規(guī)則()     {         返回 [             'name' => 'bail|required|string|max:255',             'email' => 'bail|required|string|email|max:255',             'city' => 'bail|required|string|max:255'         ];     } } 

運(yùn)行此命令以創(chuàng)建用于編寫邏輯的資源控制器。


php artisan make:controller StudentController –資源 

轉(zhuǎn)到 app/Http/Controllers/StudentController.php 并編寫代碼。

// 學(xué)生控制器.php


<?php 命名空間 App\Http\Controllers;   使用 App\Models\Student; 使用 Illuminate\Http\Request; 使用 App\Exports\StudentExport; 使用 Maatwebsite\Excel\Facades\Excel; 使用 App\Http\Requests\StoreStudentRequest;   類 StudentController 擴(kuò)展控制器 {     /**      * 顯示資源列表。      *      * @return \Illuminate\Http\Response      */     公共函數(shù)索引()     {         $students = Student::分頁(5);                返回視圖('student.index',緊湊('學(xué)生'));     }       /**      * 顯示用于創(chuàng)建新資源的表單。      *      * @return \Illuminate\Http\Response      */     公共函數(shù)創(chuàng)建()     {         返回視圖('student.create');     }     /**      * 將新創(chuàng)建的資源存儲在存儲中。      *      * @param \Illuminate\Http\Request $request      * @return \Illuminate\Http\Response      */     公共函數(shù)存儲(StoreStudentRequest $request)     {         $學(xué)生=新學(xué)生;         $student->name = $request->name;         $student->email = $request->email;         $student->city = $request->city;         $學(xué)生->保存();         return redirect(route('student.index'))->with('success','數(shù)據(jù)提交成功!');     }     /**      * 顯示指定的資源。      *      * @param int $id      * @return \Illuminate\Http\Response      */     公共功能顯示($id)     {         //     }     /**      * 顯示編輯指定資源的表單。      *      * @param int $id      * @return \Illuminate\Http\Response      */     公共功能編輯($id)     {         //     }     /**      * 更新存儲中的指定資源。      *      * @param \Illuminate\Http\Request $request      * @param int $id      * @return \Illuminate\Http\Response      */     公共功能更新(請求 $request,$id)     {         //     }       /**      * 從存儲中刪除指定的資源。      *      * @param int $id      * @return \Illuminate\Http\Response      */     公共函數(shù)銷毀($id)     {         //     }     公共函數(shù) get_student_data()     {         返回 Excel::download(new StudentExport, 'students.xlsx');     } } 

現(xiàn)在我們將在get_student_data()函數(shù)中使用 Laravel excel 包的下載方法。它將接受兩個(gè)參數(shù):導(dǎo)出類和文件名(您可以隨意命名)

第二個(gè)參數(shù)是我們要導(dǎo)出數(shù)據(jù)的文件名。

  • create() 函數(shù)用于創(chuàng)建表單。

  • store() 方法用于將數(shù)據(jù)存儲到數(shù)據(jù)庫中

  • index() 方法用于顯示數(shù)據(jù)。

創(chuàng)建視圖以添加記錄和顯示詳細(xì)信息

轉(zhuǎn)到資源/視圖文件夾。使用名為main.blade.php的文件創(chuàng)建一個(gè)新的文件夾布局

// 主.blade.php


<!doctype html> <html>   <頭>     <!-- 必需的元標(biāo)記 -->     <元字符集="utf-8">     <meta name="viewport" content="width=device-width, initial-scale=1">     <!-- 引導(dǎo) CSS -->     <link data-minify="1" href="https://www.bacancytechnology.com/blog/wp-content/cache/min/1/npm/bootstrap@5.0.2/dist/css/bootstrap.min。 css?ver=1686822484" rel="stylesheet" crossorigin="anonymous">href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel= “樣式表” integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">     <title>@yield('title')</title>   </頭>   <正文>      @yield('內(nèi)容')          <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" 交叉來源=“匿名”    /推遲>   <script src="https://www.bacancytechnology.com/blog/wp-content/cache/min/1/a200ea383104957f54808e7a395747c7.js" data-minify="1" defer></script></body> </html> 

現(xiàn)在在名為 student 的 views 文件夾中創(chuàng)建另一個(gè)文件夾。我們必須添加學(xué)生的記錄,為此,我們需要表格。表單在視圖文件中定義。

這里main.blade.php是父布局文件,包含所有常見的頁眉和頁腳。

在 Student 文件夾中,創(chuàng)建兩個(gè)文件,即:create.blade.phpindex.blade.php。

創(chuàng)建表單需要 create.blade.php 文件,以便學(xué)生可以輸入數(shù)據(jù)。打開create.blade.php并編寫以下代碼。

//創(chuàng)建.blade.php


@extends('layout.main')   @section('標(biāo)題')     報(bào)名表格 @endsection   @section('內(nèi)容') <div 類="容器">     <h2 class="text-center mt-3">學(xué)生登記表</h2>     <form action="{{ route('student.store') }}" method="POST">         @csrf         <div>             <label for="Name">名稱</label>             <input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name') }}" >             @error('姓名')             <div>{{ $message }}</div>             @enderror         </div>                  <div>             <label for="email">電子郵件</label>             <input type="text" class="form-control @error('email') is-invalid @enderror" id="email" name="email" value="{{ old('email') }}" >             @error('電子郵件')             <div>{{ $message }}</div>           @enderror         </div>                    <div>             <label for="city">城市</label>             <input type="text" class="form-control @error('city') is-invalid @enderror" id="city" name="city" value="{{ old('city') }}" >             @error('城市')             <div>{{ $message }}</div>             @enderror         </div>         <button type="submit" class="btn btn-primary">提交</button>     </表格> </div> @endsection 

index.blade.php文件中,我們已經(jīng)將 Student 數(shù)據(jù)以表格的形式顯示出來,我們可以很方便地下載數(shù)據(jù)并通過點(diǎn)擊 Export 按鈕將其導(dǎo)出為 excel 文件。

// 索引.blade.php


@extends('layout.main')   @section('標(biāo)題')     學(xué)生資料 @endsection   @section('內(nèi)容') <div class="容器 mt-3">     @if ($message = session('成功'))     <div class="alert alert-success mx-1" role="alert">         {{ $消息}}     </div>      @萬一     <h2>學(xué)生數(shù)據(jù)</h2>     <div>          <a href="{{ route('student.export') }}" class="btn btn-primary">              導(dǎo)出數(shù)據(jù)         </a>         <a href="{{ route('student.create') }}" class="btn btn-primary">             添加數(shù)據(jù)          </a>     </div>     <table class="table table-hover mt-5">         <頭>             <tr>                 <th>身份證</th>                 <th>姓名</th>                 <th>電子郵件</th>                 <th>城市</th>             </tr>         </thead>         <正文>             @foreach ($students 作為$student)                   <tr>                       <td>{{ $student->id }}</td>                       <td>{{ $student->姓名}}</td>                       <td>{{ $student->email }}</td>                       <td>{{ $student->城市}}</td>                   </tr>             @endforeach         </tbody>     </表>     <div>         {{ $students->links() }}     </div> </div> @endsection

發(fā)展。維持。優(yōu)化。部署 - 與 Bacancy!
您是否正在尋找熟練的開發(fā)人員來構(gòu)建高度優(yōu)化的應(yīng)用程序?與我們聯(lián)系以聘請 Laravel 開發(fā)人員。聯(lián)系最好的,得到最好的!時(shí)期!

運(yùn)行演示應(yīng)用程序

本教程的最后一部分-laravel 8 將數(shù)據(jù)導(dǎo)出為 excel 文件是運(yùn)行應(yīng)用程序?,F(xiàn)在是時(shí)候運(yùn)行我們的演示了。運(yùn)行以下命令。


php 工匠服務(wù) 

成功運(yùn)行服務(wù)器后,您可以看到該應(yīng)用程序正在運(yùn)行

http://localhost:8000/學(xué)生/創(chuàng)建

GitHub 資料庫

完整的源代碼可在此處獲得:laravel-excel-export-example。隨意克隆 repo 并使用代碼。

結(jié)論

所以,我希望 laravel 8 導(dǎo)出數(shù)據(jù)為 excel 文件的教程對你有所幫助。你是 laravel 愛好者,覺得基礎(chǔ)教程很難嗎?如果是,那么Laravel 教程頁面適合你!歡迎訪問和探索更多此類 laravel 教程。

Bacancy 擁有敬業(yè)、技術(shù)嫻熟且經(jīng)驗(yàn)豐富的 Laravel 開發(fā)人員,他們具有解決問題的能力。如果您正在尋找可以幫助您滿足您的要求和項(xiàng)目的 laravel 開發(fā)人員,那么不要浪費(fèi)您的時(shí)間聯(lián)系 Bacancy 并聘請 laravel 開發(fā)人員。

言鼎科技

The End