Assalamu'alaikum Wr. Wb.
Pada postingan saya kali ini saya ingin membagikan salah satu fitur pada laravel yaitu mengimport data ke database dari file berekstensi .xlsx, file berekstensi .xlsx adalah file berisi daftar data yang salah satunya dapat dibuat menggunakan aplikasi Microsoft Excel. Pada laravel terdapat fitur yang digunakan untuk melakukan import data dari file berekstensi .xlsx ke database, biasanya user menggunakan file xlsx untuk mengimport data ke database secara mudah terutama untuk data yang berjumlah banyak dan memiliki struktuk data yang sama seperti data pengguna yang ingin diimport ke database dalam jumlah banyak sekaligus tanpa menginsertnya satu per satu karena terlalu lama, langsung saja untuk tutorialnya adalah sebagai berikut:
- Siapkan project laravel anda
Tentu saja hal pertama yang perlu anda siapkan adalah project laravel yang akan anda tambahkan fitur import data dari file xlsx, pada tutorial saya kali ini saya menggunakan Laravel 8, dan saya asumsikan anda sudah memiliki atau menginstallnya sehingga kita langsung ke tutorial untuk pemasangan fitur import data dari file xlsx. - Siapkan file berekstensi .xlsx
Selanjutnya yang perlu anda siapkan adalah file berekstensi .xlsx, anda dapat membuatnya menggunakan aplikasi seperti Microsoft Excel atau WPS Office. Nama pada header untuk kolom-kolomnya harus sesuai dengan judul kolom-kolom pada database yang akan kita lakukan insert menggunakan file xlsx, penamaan tidak harus sama persis (misal masalah penggunaan huruf kapital) yang terpenting anda tahu jika kolom pada file xlsx sesuai dengan kolom pada tabel database yang akan kita import data. - Install package-package laravel yang digunakan untuk import data dari file xlsx
Selanjutnya anda perlu menginstall package-package yang diperlukan agar dapat melakukan import data dari file xlsx di laravel, package-package tersebut adalah:
- phpoffice/phpspreadsheet
- maatwebsite/excel
Perintah untuk menginstall package-package di atas menggunakan composer adalah sebagai berikut:
composer require phpoffice/phpspreadsheet
dan
composer require maatwebsite/excel - Membuat file Import di laravel
Lalu anda harus membuat file import di laravel menggunakan perintah yang sudah disediakan oleh laravel, untuk penamaanya bebas, contoh perintahnya adalah sebagai berikut:
php artisan make:import UserImport --model:User
Pastikan model User sudah anda sediakan sebelumnya atau jika anda menggunakan model lain dapat anda sesuaikan nama model yang anda gunakan anda sesuaikan dengan perintah di atas. Setelah perintah di atas dijalankan maka akan membuat sebuah file bernama UserImport di dalam folder app/Imports/. - Membangun kode untuk melakukan insert di database dari file xlsx di file Import
Setelah kita membuat file import, sekarang waktunya membangun function pada file import yang kita buat agar dapat mengambil data dari file xlsx kita dan menginsertnya di database, contoh kodenya adalah seperti berikut:
<?php
namespace App\Imports;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class UserImport implements ToModel, WithHeadingRow
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
$new_user = new User();
$new_user->name = $row['name'];
$new_user->email = $row['email'];
$new_user->phone = $row['phone'];
$new_user->address = $row['address'];
$new_user->password = Hash::make($row['kebun']);
$new_user->save();
return $new_user;
}
}
Saat file ImportUsers pertama kali dibuat class UserImport belum implements ke WithHeadingRow, maka dari itu kita perlu menambahkannya secara manual, dan untuk mengambil data dari baris pada file xlsx kita, kita perlu mengambilnya dari variable array $row dengan menambahkan key nama kolom yang datanya akan kita ambil misal $row['name'], dengan kode tersebut kita akan memanggil data nama yang berada pada baris di xlsx yang berada di kolom name. - Memanggilnya di function
Untuk menggunakan file import yang telah kita buat, maka kita perlu memanggilnya di function yang akan kita panggil dari route sebagai API, contoh bentuk function nya adalah sebagai berikut:
...
use Maatwebsite\Excel\Facades\Excel;
...
public function add_from_xlsx(Request $request)
{
$file = $request->file('xlsx_new_users');
Excel::import(new UserImport(), $file, null, \Maatwebsite\Excel\Excel::XLSX, [
'startRow' => 2, // dimulai dari baris kedua (setelah baris judul)
]);
return response()->json([
'success' => true,
'message' => 'berhasil menambah data user'
]);
}
Untuk melakukan import data dari file xlsx kita perlu memanggil class Excel dari package Maatwebsite lalu menggunakannya untuk melakukan import data dengan parameter pertama class import kita, parameter kedua file xlsx yang kita upload, parameter ketiga function XLSX yang kita dapatkan dari class Excel dari package Maatwebsite, dan parameter keempat konfigurasi kita akan mengambil data dari file xlsx dari baris keberapa (kode diatas menunjukkan pengambilan data dimulai dari baris ke 2), dengan kode diatas kita bisa menginsert semua data user dari baris-baris yang ada di file xlsx kita - Memanggil function import user di route
Terakhir kita langsung bisa memanggil function yang kita buat di langkah sebelumnya dan sudah bisa kita gunakan untuk melakukan import data user dari file xlsx dengan menguploadnya terlebih dahulu menggunakan API, contoh kode pemanggilan function import di route adalah sebagai berikut:
...
Route::prefix('user')->group(function () {
Route::post('/import-xlsx', [UserController::class, 'add_from_xlsx']);
});
...
0 Komentar