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: