Export file Laravel với Maatwebsite 3.0

1. Giới thiệu

Bài viết này mình sẽ hướng dẫn các bạn cách export file trong laravel với package maatwebsite 3.0. Mình viết bài này vì trong project mình đang làm có sử dụng đến chức năng này và search trên mạng thì rất nhiều bài hướng dẫn với phiên bản maatwebsite 2.1 còn với 3.0 thì khá ít và cũng chưa có link vietsub nào hướng dẫn chi tiết nên mình sẽ viết bài này để hướng dẫn các bạn muốn dùng với phiên bản 3.0. Cũng vẫn là làm việc với maatwebsite nhưng cách áp dụng có đôi chút khác nhau mình sẽ giới làm ví dụ cụ thể trong bài để các bạn có thể áp dụng ngay và thực hành.

2. Cài đặt package

Version Laravel Version
3.0 ^5.5 ^7.0

Bài này mình sẽ hướng dẫn trên môi trường Laravel 5.5.

Cài gói maatwebsite trong composer.json, chạy composer require package maatwebsite.

composer require maatwebsite/excel

Trong config/app.php thêm vào providers

'providers' => [
    /*
     * Package Service Providers...
     */
    Maatwebsite\Excel\ExcelServiceProvider::class,
]

Trong config/app.php thêm vào aliases

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

Để publish config, chạy vendor publish command:

php artisan vendor:publish

Câu lệnh này sẽ tạo ra một file trong config là excel.php Vậy là đã xong bước cài đặt rồi!

3. Export file

Mình sẽ lấy một ví dụ về xuất đơn hàng để các bạn có thể hình dung rõ hơn. Đầu tiên là tạo một route để khi click xuất file.

<div class="export">
     <a href ="{{ route('export') }}" class="btn btn-info export" id="export-button"> Export file </a>
</div>

Tiếp theo là chúng ta sẽ vào routes/web.php để tạo route trên

Route::get('export', '[email protected]')->name('export');

Bước tiếp theo là tạo controller ExportController

run command
php artisan make:controller ExportController

Giờ chúng ta đã có controller rồi tiếp theo vào controller thêm những dòng này dưới namspaces để chúng ta có thể sử dụng package vừa cài nhé.

use Excel;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;

Class ExporController sẽ được implements từ 2 Interface FromCollection và WithHeadings

class ExportController extends Controller implements FromCollection, WithHeadings

Trong controller này chúng ta sẽ sử dụng trait Exportable, viết dòng dưới này ở trong class ExportController.

use Exportable;

Giờ đến bước lấy dữ liệu chúng ta sẽ xuất file. Tiếp theo là chúng ta sẽ implements phương thức collection() của \Maatwebsite\Excel\Concerns\FromCollection.

Trong collection() chúng ta sẽ lấy dữ liệu muốn xuất file Ví dụ dưới đây là mình muốn xuất file của đơn hàng

public function collection()
    {
        $orders = Order::all();
        foreach ($orders as $row) {
            $order[] = array(
                '0' => $row->id,
                '1' => $row->name,
                '2' => $row->address,
                '3' => $row->email,
                '4' => $row->order_date,
                '5' => number_format($row->total),
            );
        }

        return (collect($order));
    }

Tạo tiêu đề các cột của bảng

public function headings(): array
    {
        return [
            'id',
            'Tên',
            'Địa chỉ',
            'Email',
            'Ngày đặt hàng',
            'Tổng',
        ];
    }

Việc cuối cùng là tiến hành download chúng ta sẽ dùng Excel::download().

public function export(){
     return Excel::download(new ExcelController(), 'orders.xlsx');
}

Giờ hãy ấn nút Export file thôi. Và đây là kết quả sau khi xuất file.

Vậy là mình đã hướng dẫn các bạn cách xuất file với laravel sử dụng maatwebsite 3.0, đây là một package rất hay, các bạn có thể import file hay export ra file xlxs, csv... Các bạn có thể lên trang chủ tìm hiểu thêm nhé link tham khảo: https://laravel-excel.maatwebsite.nl/3.0/https://laravel-news.com/laravel-excel-3-0