Hưỡng dẫn export import table trong laravel dùng package Maatwebsite

Mình đang tìm hiểu về import export file Excel trong laravel nên viết lại hướng dẫn cho dễ nhớ.Bài này SonWeb dùng laravel 7 , các version laravel khác hoàn toàn tương tự.Sau đây là các bước chi thể để xuất và nhập từ excel , csv thành table trong laravel nhé.

1.Cài đặt Package Maatwebsite

Bỏ qua cơ bản cài project laravel, bạn mở command laravel và dùng lệnh cài composer Maatwebsite theo lệnh sau:

composer require maatwebsite/excel

Sau khi cài xong package Maatweebsite, tiếp theo mở config/app.app, bạn thêm 2 dòng code sau

 
'providers' => [
	....
	Maatwebsite\Excel\ExcelServiceProvider::class,

],

'aliases' => [
	....
	'Excel' => Maatwebsite\Excel\Facades\Excel::class,

],

Tiếp theo bạn tạo file config excel bằng lệnh sau:

php artisan vendor:publish

hoặc nếu báo lỗi thì gõ

php artisan vendor:publish –provider=”Maatwebsite\Excel\ExcelServiceProvider”

bạn di chuyển vào thử mục config thấy file excel như hình là ok.

2.Tạo route import export tương ứng

Ví dụ mình sẽ tạo 3 route mở view chọn option import,export từ 1 bảng clients trong laravel như sau:

Route::get('exportClient','TestController@export')->name('export');
Route::get('importExportClient','TestController@importExporClient');
Route::post('importClient','TestController@import')->name('import');

3.Tạo file view blade hiển thị tương ứng

Bước này đơn giản cần hiển thị màn hình import , export để bạn lựa chọn. Bạn tạo file tên bất kỳ theo ý thích mình đặt là: importExportClient.blade.php với nội dung sau:

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 7 Import Export Excel to sonweb</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" />
</head>
<body>
   
<div class="container">
    <div class="card bg-light mt-3">
        <div class="card-header">
            Laravel 7 Import Export Excel to database Example - SonWeb
        </div>
        <div class="card-body">
           <form action="{{route('importClient')}}" method="post" enctype="multipart/form-data">
                @csrf
                <input type="file" name="file" class="form-control" />
                <br>
                <button class="btn btn-success"> Import Client Data </button>
                <a href="{{route('exportClient')}}" class="btn btn-warning"> Export Client data </a>
           </form>
        </div>
    </div>
</div>
   
</body>
</html>

4.Tạo class Import Client

maatwebsite 3 xây dựng sẵn class import , bạn chỉ cần gõ lệnh sau :

p php artisan make:import ClientImport –model=Client

với Client là tên model class Client mình đã tạo trước đó. Sau khi tạo file ClientImport bạn sẽ thấy code mặc định sau:

<?php

namespace App\Imports;

use App\Client;
use Maatwebsite\Excel\Concerns\ToModel;

class ClientImport implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new Client([
            //
        ]);
    }
}

Bạn thêm các filed tương ứng đã tạo trong database mà bạn muốn import, ở đây mình tạo mẫu theo table clients mình như sau:

<?php

namespace App\Imports;

use App\Clients;
use Maatwebsite\Excel\Concerns\ToModel;

class ClientImport implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new Clients([
            //
            'client_name'      => $row[1],
            'client_email'     => $row[2],
            'phone'            => $row[3],
        ]);
    }
}

5.Tạo file Export Client

Bạn gõ lệnh sau trong command :

php artisan make:export ClientExport –model=Clients

Code mặc class export như sau:

<?php

namespace App\Exports;

use App\Clients;
use Maatwebsite\Excel\Concerns\FromCollection;

class ClientExport implements FromCollection
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return Clients::all();
    }
}

Bạn có thể tùy chỉnh export theo hướng dẫn trên https://docs.laravel-excel.com/3.0/exports/exportables.html

6.Tạo file Controller tương ứng view

Tới đây bạn tạo file controller tên file tương ứng route trên , mình đặt là TestController, với đường dẫn “app/Http/Controllers/TestController.php”. Controller này sẽ có các functions tương ứng xử lý request,response server về view,import,export.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\SendEmailReminder;
use App\Clients;
use App\Exports\ClientExport;
use App\Mail\MyTestMail;

use App\Exports\UserExport;
use App\Imports\UserImport;
use Maatwebsite\Excel\Facades\Excel;

class TestController extends Controller
{
    //
   
    public function importExporClient() {
        return view('importExportClient');
    }

    public function exportClient() {
        return Excel::download(new ClientExport,'clients.xlsx');
    }
    public function importClient() {
        Excel::import(new ClientImport,request()->file('file'));
        return back();
    }
}

Đọc file Excel trong laravel dung Maatweb

Tương tự như trên nhưng khi bạn click import vào table database, ta sẽ chỉ chuyển thành Array theo function của Maatweb

public function importClient(Request $request) {
        /*
        Excel::import(new UserImport,request()->file('file'));
        return back();
        */
        $htmlc = Excel::toArray(new UserImport,request()->file('file'));
        //$htmlc = Excel::toCollection(new UserImport,request()->file('file'));
        //print_r($htmlc);
        foreach ($htmlc as $key => $row) {
            //echo $row['name'];
            //dd($key,$row);
            foreach ($row as $user) {
                //dd($user);
                echo $user[1]. "<br>
";
            }
        }
        
    }

‘file’ là tên bạn đặt khi up load file, , khi chạy bạn sẽ thấy hiển thị client sau:

5/5 - (2 bình chọn)
Nhắn tin qua Zalo

0932644183