Laravel 8 使用示例將數(shù)據(jù)導(dǎo)出為 Excel 文件
我們已經(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.php和index.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ā)人員。