Laravel 8 使用示例将数据导出为 Excel 文件

言鼎科技 2023-07-01 408

我们已经看过一些针对初学者的 Laravel 教程,并且通过我们的一篇博客文章,我们收到了一个查询 - Laravel 8 导出数据 excel 文件和示例。所以这里我们有另一个 Laravel 教程!

在Laravel 8 将数据导出为 excel 文件的分步指南中,我们将构建一个演示应用程序,我们将在其中使用 maatwebsite/excel 包导出数据。您可能熟悉这个包;它提供了将数据导出为 CSV 文件或 Excel 文件的最佳方式。

我们将构建一个演示应用程序,我们将在其中了解如何使用 maatwebsite/excel 包在 Laravel 中实现 Excel 导出功能。

教程目标:Laravel 8 使用示例将数据导出为 Excel 文件

在开始开发部分之前,让我们看一下下面的视频,以便您了解我们将在此博客中构建什么。

使用迁移创建模型

运行此命令以创建模态


php artisan make:model 学生-m 

// 学生.php


<? PHP  命名空间 App\Models;  使用 Illuminate\Database\Eloquent\Factories\HasFactory; 使用 Illuminate\Database\Eloquent\Model;  类学生扩展模型 {     使用 HasFactory;      公共 $fillable = [         'ID',         '姓名',         '电子邮件',         '城市'     ]; } 

这里我们必须存储学生数据以创建一个表并定义表的字段。

创建数据表

转到数据库/迁移文件夹,然后打开迁移文件并编写以下代码。

// 2021_07_16_041455_create_students_table


<?php 使用 Illuminate\Database\Migrations\Migration; 使用 Illuminate\Database\Schema\Blueprint; 使用 Illuminate\Support\Facades\Schema;   类 CreateStudentsTable 扩展迁移 {     /**      * 运行迁移。      *      * @return 无效      */     公共功能向上()     {         Schema::create('students', function (Blueprint $table) {             $表->id();             $table->string('名字');             $table->string('电子邮件');             $table->string('城市');             $表->时间戳();         });     }     /**      * 反转迁移。      *      * @return 无效      */     公共功能向下()     {         Schema::dropIfExists('学生');     } } 

我们将使用上述字段创建一个表。

现在运行这个命令。此命令对于在 GUI 中创建实际表和迁移数据库中的表很有用。


php 工匠迁移 

安装 maatwebsite/excel 包

要安装 maatwebsite/excel,运行下面提到的命令


composer 需要 maatwebsite/excel。 

借助这个包,我们可以将数据导出到 excel 文件中。

现在打开config/app.php并添加服务提供商和别名。


'供应商'=> [       ....      Maatwebsite\Excel\ExcelServiceProvider::class, ], '别名'=> [       ....      'Excel' => Maatwebsite\Excel\Facades\Excel::class, ], 

定义路线

在我们的演示应用程序中导航用于定义路由的网页需要路由,打开 routes/web.php,并使用以下代码。

// 网页.php


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

创建导出类

在本节中,我们将创建一个导出类并定义它所连接的模型。maatwebsite 包提供了一种构建导出类的方法,以便我们可以在控制器中进一步使用它。

运行以下命令。


php artisan make:export StudentExport --model=学生 

这里StudentExport类将定义我们要在 excel 文件中导出的数据。

转到app/Exports/StudentExport.php并在您的代码中进行以下更改

// 学生导出.php


<?php 命名空间 App\Exports;   使用 App\Models\Student; 使用 Maatwebsite\Excel\Concerns\WithHeadings; 使用 Maatwebsite\Excel\Concerns\FromCollection;   类 StudentExport 实现 FromCollection、WithHeadings {     /**     * @return \Illuminate\Support\Collection     */     公共功能标题():数组{         返回[             'ID',             '姓名',             '电子邮件',             '城市',             '创建时间',             '更新时间'         ];     }     公共函数集合()     {         返回学生::所有();     } } 

heading ()函数将定义标题,该标题将显示在 excel 文件中。

collection ()方法将返回我们必须导出的数据。在我们的演示应用程序中,我们将使用学生模型导出所有学生数据。

创建控制器

在创建控制器之前,我们必须发出请求。

创建请求的命令。


php artisan make::请求 StoreStudentRequest 

以下是适用于输入学生数据的验证规则。


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

运行此命令以创建用于编写逻辑的资源控制器。


php artisan make:controller StudentController –资源 

转到 app/Http/Controllers/StudentController.php 并编写代码。

// 学生控制器.php


<?php 命名空间 App\Http\Controllers;   使用 App\Models\Student; 使用 Illuminate\Http\Request; 使用 App\Exports\StudentExport; 使用 Maatwebsite\Excel\Facades\Excel; 使用 App\Http\Requests\StoreStudentRequest;   类 StudentController 扩展控制器 {     /**      * 显示资源列表。      *      * @return \Illuminate\Http\Response      */     公共函数索引()     {         $students = Student::分页(5);                返回视图('student.index',紧凑('学生'));     }       /**      * 显示用于创建新资源的表单。      *      * @return \Illuminate\Http\Response      */     公共函数创建()     {         返回视图('student.create');     }     /**      * 将新创建的资源存储在存储中。      *      * @param \Illuminate\Http\Request $request      * @return \Illuminate\Http\Response      */     公共函数存储(StoreStudentRequest $request)     {         $学生=新学生;         $student->name = $request->name;         $student->email = $request->email;         $student->city = $request->city;         $学生->保存();         return redirect(route('student.index'))->with('success','数据提交成功!');     }     /**      * 显示指定的资源。      *      * @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      */     公共函数销毁($id)     {         //     }     公共函数 get_student_data()     {         返回 Excel::download(new StudentExport, 'students.xlsx');     } } 

现在我们将在get_student_data()函数中使用 Laravel excel 包的下载方法。它将接受两个参数:导出类和文件名(您可以随意命名)

第二个参数是我们要导出数据的文件名。

  • create() 函数用于创建表单。

  • store() 方法用于将数据存储到数据库中

  • index() 方法用于显示数据。

创建视图以添加记录和显示详细信息

转到资源/视图文件夹使用名为main.blade.php的文件创建一个新的文件夹布局

// 主.blade.php


<!doctype html> <html>   <头>     <!-- 必需的元标记 -->     <元字符集="utf-8">     <meta name="viewport" content="width=device-width, initial-scale=1">     <!-- 引导 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('内容')          <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> 

现在在名为 student 的 views 文件夹中创建另一个文件夹。我们必须添加学生的记录,为此,我们需要表格。表单在视图文件中定义。

这里main.blade.php是父布局文件,包含所有常见的页眉和页脚。

在 Student 文件夹中,创建两个文件,即:create.blade.phpindex.blade.php

创建表单需要 create.blade.php 文件,以便学生可以输入数据。打开create.blade.php并编写以下代码。

//创建.blade.php


@extends('layout.main')   @section('标题')     报名表格 @endsection   @section('内容') <div 类="容器">     <h2 class="text-center mt-3">学生登记表</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文件中,我们已经将 Student 数据以表格的形式显示出来,我们可以很方便地下载数据并通过点击 Export 按钮将其导出为 excel 文件。

// 索引.blade.php


@extends('layout.main')   @section('标题')     学生资料 @endsection   @section('内容') <div class="容器 mt-3">     @if ($message = session('成功'))     <div class="alert alert-success mx-1" role="alert">         {{ $消息}}     </div>      @万一     <h2>学生数据</h2>     <div>          <a href="{{ route('student.export') }}" class="btn btn-primary">              导出数据         </a>         <a href="{{ route('student.create') }}" class="btn btn-primary">             添加数据          </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

发展。维持。优化。部署 - 与 Bacancy!
您是否正在寻找熟练的开发人员来构建高度优化的应用程序?与我们联系以聘请 Laravel 开发人员。联系最好的,得到最好的!时期!

运行演示应用程序

本教程的最后一部分-laravel 8 将数据导出为 excel 文件是运行应用程序。现在是时候运行我们的演示了。运行以下命令。


php 工匠服务 

成功运行服务器后,您可以看到该应用程序正在运行

http://localhost:8000/学生/创建

GitHub 资料库

完整的源代码可在此处获得:laravel-excel-export-example。随意克隆 repo 并使用代码。

结论

所以,我希望 laravel 8 导出数据为 excel 文件的教程对你有所帮助。你是 laravel 爱好者,觉得基础教程很难吗?如果是,那么Laravel 教程页面适合你!欢迎访问和探索更多此类 laravel 教程。

Bacancy 拥有敬业、技术娴熟且经验丰富的 Laravel 开发人员,他们具有解决问题的能力。如果您正在寻找可以帮助您满足您的要求和项目的 laravel 开发人员,那么不要浪费您的时间联系 Bacancy 并聘请 laravel 开发人员。

言鼎科技

The End