laravel maatwebsite/excel3.1 导入详解

2021-02-04 11:07:26 浏览数 (1)

使用"maatwebsite/excel": "^3.1" 导入

官方文档地址

代码语言:javascript复制
https://docs.laravel-excel.com/3.1/imports/batch-inserts.html

1.安装composer包

代码语言:javascript复制
composer require maatwebsite/excel

2. 在 config/app.php 中注册服务提供者到 providers 数组:

代码语言:javascript复制
MaatwebsiteExcelExcelServiceProvider::class,

3.在 config/app.php 中注册到 aliases 数组:

代码语言:javascript复制
'Excel' => MaatwebsiteExcelFacadesExcel::class,

4.生成 Laravel Excel 的配置文件:(发布)

代码语言:javascript复制
php artisan vendor:publish --provider="MaatwebsiteExcelExcelServiceProvider"

至此,完成了composer包的安装步骤

5.新建一个导入文件

代码语言:javascript复制
php artisan make:import 文件名称 --model=Model地址

此操作会在app/下创建一个Import目录并创建一个文件

代码语言:javascript复制
.
├── app
│   ├── Imports
│   │   ├── CompanyUserImport.php
│ 
└── composer.json

我这里需要导入的数据需要自己处理一下,所以使用的ToCollection的方法

app/Import/CompanyUserImport.php代码如下:

代码语言:javascript复制
<?php

namespace AppImports;

use AppModelsCompanyCompanyUserModel;
use MaatwebsiteExcelConcernsToCollection;
use IlluminateSupportCollection;

class CompanyUserImport implements ToCollection
{
    /**
     * 使用 ToCollection
     * @param array $row
     *
     * @return User|null
     */
    public function collection(Collection $rows)
    {
        foreach ($rows as $row) 
        {
            // dump($row);
            // 处理数据
        }
        CompanyUserModelDB::insert($data);
    }

    public function createData($rows)
    {
        //todo
    }
}
    

控制器调用

代码语言:javascript复制
<?php

namespace AppHttpControllersCompany;


use IlluminateHttpRequest;
use AppImportsCompanyUserImport;
use AppHttpControllersController;
use MaatwebsiteExcelFacadesExcel;

class CompanyUserController extends Controller
{

    /**
     * excel批量导入成员
     *
     * @param Request $request
     * @return void
     */
    public function importMember(Request $request)
    {

        Excel::import(new CompanyUserImport, request()->file('excelfile'));
    }
}

0 人点赞