Tentu, ini artikel yang Anda minta:
Setelah membahas cara ekspor data ke Excel, kini saatnya kita mempelajari kebalikannya: mengimpor data dari file Excel ke dalam aplikasi Laravel. Mengimpor data adalah fitur krusial yang memungkinkan pengguna mengunggah data secara massal, seperti daftar produk, user, atau data penjualan, tanpa harus memasukkan satu per satu. Untuk tugas ini, kita akan kembali menggunakan package yang sama, Laravel Excel (Maatwebsite/Laravel-Excel).
Dalam tutorial Laravel ke-39 ini, kita akan membahas cara mengonfigurasi dan menggunakan Laravel Excel untuk mengimpor data dari file .xlsx atau .csv ke database Anda.
1. Menginstal Laravel Excel
Jika Anda sudah mengikuti Tutorial #38, Anda tidak perlu melakukan langkah ini lagi. Namun, jika ini pertama kalinya Anda menggunakan Laravel Excel, instal terlebih dahulu melalui Composer:
composer require maatwebsite/excel
Setelah instalasi selesai, Laravel Excel akan terdeteksi secara otomatis oleh Laravel.
2. Membuat Kelas Import
Sama seperti ekspor, Laravel Excel menggunakan “Import Class” untuk mendefinisikan bagaimana data akan dibaca dari file Excel.
Gunakan perintah Artisan untuk membuat kelas import baru:
php artisan make:import UsersImport --model=User
Perintah ini akan membuat file app/Imports/UsersImport.php yang terhubung dengan model User.
Memodifikasi Kelas Import
Buka file app/Imports/UsersImport.php dan modifikasi seperti contoh di bawah ini. Kita akan menggunakan interface ToModel untuk mengimpor setiap baris data menjadi model.
<?php
namespace App\Imports;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow; // Untuk mengabaikan baris header
class UsersImport implements ToModel, WithHeadingRow
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new User([
'name' => $row['name'],
'email' => $row['email'],
'password' => Hash::make($row['password']),
]);
}
}
Dalam contoh ini:
ToModel: Interface ini mengharuskan kita mengimplementasikan metodemodel()yang akan dipanggil untuk setiap baris data di file Excel. Kita membuat objekUserbaru dari data$rowdan mengembalikannya.WithHeadingRow: Interface ini sangat penting. Ini memberitahu Laravel Excel untuk mengabaikan baris pertama (header) dan menggunakan nama kolom dari header tersebut (misalnya ‘name’, ’email’) sebagai kunci array$row.
Penting: Nama kunci array $row (misalnya ['name']) harus persis sama dengan nama kolom di baris header file Excel Anda.
3. Membuat Controller dan Form
Sekarang, kita perlu membuat formulir untuk mengunggah file Excel dan sebuah controller untuk memproses unggahan tersebut.
Membuat Form HTML
Buat view Blade baru, misalnya resources/views/import.blade.php, dengan formulir unggah file:
<!DOCTYPE html>
<html>
<head>
<title>Import Users</title>
</head>
<body>
<h1>Import Data Pengguna</h1>
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
<form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
@csrf
<label for="file">Pilih file Excel (.xlsx atau .csv):</label><br>
<input type="file" name="file" id="file" required><br><br>
<button type="submit">Import</button>
</form>
</body>
</html>
Perhatikan atribut enctype="multipart/form-data" yang wajib ada untuk mengunggah file.
Membuat Controller dan Route
Buat sebuah controller baru jika belum ada:
php artisan make:controller UserController
Kemudian, modifikasi app/Http/Controllers/UserController.php seperti di bawah ini:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Imports\UsersImport; // Impor kelas import yang telah kita buat
use Maatwebsite\Excel\Facades\Excel; // Impor facade Excel
class UserController extends Controller
{
public function showImportForm()
{
return view('import');
}
public function import(Request $request)
{
// Validasi file yang diunggah
$request->validate([
'file' => 'required|mimes:xlsx,csv,xls',
]);
try {
// Impor file menggunakan kelas UsersImport
Excel::import(new UsersImport, $request->file('file'));
return redirect()->back()->with('status', 'Data pengguna berhasil diimpor!');
} catch (\Exception $e) {
return redirect()->back()->with('status', 'Terjadi kesalahan saat mengimpor: ' . $e->getMessage());
}
}
}
Terakhir, definisikan rute di routes/web.php:
use App\Http\Controllers\UserController;
Route::get('/users/import-form', [UserController::class, 'showImportForm'])->name('users.import.form');
Route::post('/users/import', [UserController::class, 'import'])->name('users.import');
4. Proses Import dan Fitur Lanjutan
Sekarang, jika Anda mengakses URL /users/import-form, Anda akan melihat formulir untuk mengunggah file. Pilih file Excel Anda dan klik “Import”. Laravel akan membaca data, membuat model User untuk setiap baris, dan menyimpannya ke database Anda.
Laravel Excel juga memiliki fitur canggih lainnya:
- Validasi Data: Anda bisa menambahkan validasi di dalam kelas import Anda.
- Batching: Mengimpor data dalam potongan-potongan kecil untuk menghemat memori.
- Chunking: Memproses file besar secara efisien.
Dengan menguasai fitur impor ini, Anda dapat menambahkan fungsionalitas yang kuat pada aplikasi Anda, memungkinkan pengguna untuk mengelola data dengan lebih fleksibel dan efisien.
Catatan: Pastikan struktur kolom di file Excel Anda cocok dengan kunci array di kelas import Anda. Jika tidak, proses impor akan gagal.