自從 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 有志之士可以一起研究下怎麼用