自从 maatwebsite/excel 3.0 更新以后就没用过, 因为只有导出功能,而我们更需要的是导入导出功能,
我要用导入功能真是找案例都都找不到~没办法自己学习使用吧~再写这样一个文档,凑合着给大家看~
先放官方文档:https://laravel-excel.maatwebsite.nl/3.1/getting-started/installation.html
再放git 地址:https://github.com/Maatwebsite/Laravel-Excel
我用的时候,中国镜像里还没有3.1.0向上版本 ,只好翻墙更新了3.1.0 版本,这是第一个坑(没有了),千万别用3.0的版本使用导入功能,压根就没有这个功能~
下面还是按顺序讲一遍操作吧:
第一步:
composer require maatwebsite/excel ~3.1.0
安装3.1.0向上的版本 我用的3.1.0 中国镜像内暂时没有,请去掉中国镜像的配置
第二步:
添加ServiceProvider config/app.php
'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
第三步:
添加门面在 config/app.php
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]
第四步:
生成配置文件(我没有生成配置文件,无所谓,我不用~)
要发布配置,请运行vendor publish命令:
php artisan vendor:publish
1这将创建一个名为的新配置文件config/excel.php。
如果以上步骤都顺利完成,那下面就可以用了
按照文档走
第一步,要先建立一个你自己的模型类,在 App\Imports
所以自己手动在laravel 目录 App 目录下创建一个Imports(导入功能,导出功能还要建另一个导入目录)的目录吧,不要使用命令了,这个make::Imports,我使用失败了
然后在里面建立一个类UserImoport.php
<?php
namespace App\Imports;
use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
class UsersImport implements ToModel
{
/**
* @param array $row
*
* @return User|null
*/
public function model(array $row)
{
return new User([
'name' => $row[0],
'email' => $row[1],
'password' => Hash::make($row[2]),
]);
}
}
这里向和我一样不明白的小白说下,关于导入导出excel 文档里主要设计到三种 : 模型 model , 集合 collection , 数组 Array
文档使用的是模型,意思是将导入的数据转变为模型数据(就是转变成咱们从laravel 中查询出来的一样)(加深下理解,这个模型就和咱们调用数据库的模型作用是一样的,只不过这个数据源头是excel中的数据 这里,返回的数据有两种格式集合和对象,无论哪一种都是加工数据,就是把每行数据 加工变成 键值对 或者 其它数据的方法)
,我不太明白为什么要导入模型(现在明白了,就是把excel数据加工成对象返回出去),可能这个当案例好用吧(错误的理解)~
关于 implements ToModel 就是接口的继承 重写一份规范,我的理解就是 对 方法功能 的 再加工 其实就是加工操作,类似laravel 中间件的作用吧~
此外还有 implements ToArray 和 implements ToCollection 两个方法,
我挂的也是一个空的导入模型 直接贴代码用吧~
建立我自己的模型类
<?php
namespace App\Imports;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToArray;
class UsersImport implements ToArray
{
public function Array(Array $tables)
{
return $tables;
}
}
我就是这样写的~ 也还没研究透彻怎么用
第二步直接引用就行了(我主要是导入excel 文件使用的)
然后就是主要用导入的方法引用模型就行
导入的方法 要和你写的导入模型内容一致
导入方法有
$array = Excel::toArray(new UsersImport, 'users.xlsx');
$collection = Excel::toCollection(new UsersImport, 'users.xlsx');
以上两种 ,引用你创建的模型,就可以直接获得导入的接口了。我用的toArray;
public function BatchUpload(Request $request)
{
$file = $request->file('excel'); //获取UploadFile实例
if ( !$file->isValid()) { //判断文件是否有效
return redirect()
->back()
->withErrors('文件上传失败,请重新上传');
}
$data = Excel::toArray(new UsersImport, request()->file('excel'));
dd($data);
// 加工数据$data;
}
本文是草稿文档,后续继续完善,今天时间不多了~
明天(过了很多个明天了)继续完善吧~
QQ:2097724800 有志之士可以一起研究下怎么用
2345

被折叠的 条评论
为什么被折叠?



