Laravel 8 使用示例将数据导出为 Excel 文件
我们已经看过一些针对初学者的 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.php和index.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 开发人员。