Laravel Excel 3.1 使用方法 Excel 導入操作

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章