Hello anh em! Nay mình sẽ giới thiều với mọi người thư viện maatwebsite để sử lý việc export file excel trong project laravel nào cũng bắt tay vào tạo project test thử nhé.
Vào forder muốn đặt dự án và chạy lệnh dưới đây để tạo 1 prj laravel tên project là excel nhé. Nếu lỗi ‘Permission’ thì chạy bằng quyền sudo là được. $ composer create-project -prefer-dist laravel/laravel excel Sau đó tạo DB và chỉnh sửa file .env để kết nối DB nhé
DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=excel DB_USERNAME=root DB_PASSWORD=
Chạy lệnh để generate key $ php artisan key:generate Chạy migrate để tạo bảng user $ php artisan migrate
Vậy là đã tạo xong project laravel, tiếp theo chúng ta tạo dữ liệu mẫu cho bảng user để tý nữa mình test export nhé. Bước 1: Tạo 1 seeder mới cho bảng users có tên là UsersTableSeeder.php $ php artisan make:seeder UsersTableSeeder Bước 2: Giờ đây chúng ta đã có 1 file UsersTableSeeder.php trong thư mục database/seeds/ . trong function chúng ta sẽ thêm câu lệnh để chạy factory factory(User::class, 100)->create(); và nhớ use model User vào nhé. UsersTableSeeder.php hoàn chỉnh sẽ như sau:
<?php use IlluminateDatabaseSeeder; use AppUser; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(User::class, 100)->create(); } }
Tiếp theo đăng ký seed UsersTableSeeder ở file DatabaseSeeder.php, file DatabaseSeeder.php, hoàn chỉnh sẽ như sau:
<?php use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { /** * Seed the application’s database. * * @return void */ public function run() { $this->call(Users::class); } }
Xong rồi, giờ chúng ta chạy lệnh: php artisan db:seed vào db kiểm tra sẽ có 100 bản ghi mẫu trong bảng user rồi, giờ chúng ta bắt đầu test export nhé.
chạy lệnh sau để cài đặt thư viện composer require maatwebsite/excel Chạy lệnh sau để pulish config php artisan vendor:publish -provider=”MaatwebsiteExcelExcelServiceProvider”
- Tạo route để khi gọi đến route này sẽ export ra file Route::get(‘export’, ‘ExportController@export’)->name(‘export’);
- Tạo Controller php artisan make:controller ExportController
- chạy câu lệnh bên dưới, mình tạo một file tên là UsersExport để sử lý việc export php artisan make:export UsersExport -model=User
- Sau khi chạy câu lệnh bên trên, sẽ tạo cho ta file UsersExport.php trong AppExportsUserExport.php , Sửa file thành như sau
namespace AppExports; use AppUser; use MaatwebsiteExcelConcernsFromCollection; use MaatwebsiteExcelConcernsWithHeadings; use MaatwebsiteExcelConcernsWithMapping; class UsersExport implements FromCollection,WithHeadings,WithMapping { /** * @return IlluminateSupportCollection */ public function collection() { return User::all(); } /** * Returns headers for report * @return array */ public function headings(): array { return [ ‘ID’, ‘Name’, ‘Email’, “Created”, “Updated” ]; } public function map($user): array { return [ $user->id, $user->name, $user->email, $user->created_at, $user->updated_at ]; } }
Giải thich file trên nhé
- Mình use AppUser để sử dụng Eloquent trong Laravel,
- Dùng class của MaatwebsiteExcel để sử dụng chức năng export
- Hàm headings(): tạo các cột tiêu đề
- Hàm Map($user): map những giá trị cần xuất ra với heading
- Tiếp theo ta sẽ cài đặt ở file Controller để có thể sử dụng file UsersExport.php, use AppUsersExport đển UserController.php
- Tiếp theo sửa controller
<?php namespace AppHttpControllers; use AppExportsUsersExport; use MaatwebsiteExcelFacadesExcel; class ExportController extends Controller { public function export() { return Excel::download(new UsersExport, ‘users.xlsx’); } }
Vậy là xong rồi, truy câp vào đường dẫn đã tạo ở trên chúng ta sẽ xuất được ra 1 file users.xlsx rồi nhé, bạn có thể thay đổi định dạng file xuất thành users.csv hay tsv. Cảm ơn mn đã quan tâm )!