Import Excel di Laravel
Cara import Excel untuk menambahkan data baru dari file Excel di Laravel menggunakan library Laravel Excel
Link: https://laravel-excel.com/
Install library
composer require maatwebsite/excel
Buat file import baru dengan perintah make:import
php artisan make:import BarangImport
// app/Imports/BarangImport.php
use App\Models\Barang;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;
HeadingRowFormatter::default('none');
class BarangImport implements ToCollection, WithHeadingRow
{
public function collection(Collection $rows)
{
foreach ($rows as $row) {
Barang::updateOrCreate(
[
'kode' => $row['Kode Barang'],
'nama' => $row['Nama Barang'],
],
[
'harga_jual' => $row['Harga Jual'],
'harga_beli' => $row['Harga Beli'],
'satuan' => $row['Satuan'],
]
);
}
}
}
WithHeadingRow
digunakan jika file Excel yang akan di import menggunakan HeaderHeadingRowFormatter
di set kenone
, karena default nya menggunakan slug dari Laravel, jadi jikanone
bisa menggunakan nama header nya langsungupdateOrCreate
merupakan fitur Laravel untuk melakukan insert jika data kosong, dan update jika data tersedia- Pada contoh diatas,
where
nya menggunakankode
dannama
, jadi jika ada kode dan nama yang sama maka akan di update, tapi jika tidak ada maka akan di insert - Contoh
$row['Kode Barang']
merupakan cell/kolom di Excel nya dengan headerKode Barang
Di controller app/Http/Controllers/BarangController.php
tambahkan fungsi baru
use App\Imports\BarangImport;
use Maatwebsite\Excel\Facades\Excel;
// ...
public function import()
{
return view('barang.import');
}
public function import_proses()
{
Excel::import(new BarangImport, request()->file('excel'));
return redirect()->route('barang.index')->with(['success' => 'Data berhasil di import']);
}
Contoh view nya untuk upload file resources/views/barang/import.blade.php
<form action="{{ route('barang.import.proses') }}" method="post" enctype="multipart/form-data">
@csrf
<div class="form-group mb-3">
<label for="excel">File Excel</label>
<input type="file" class="form-control" name="excel" id="excel" required>
</div>
<div class="mt-4">
<button type="submit" class="btn btn-success">Import</button>
</div>
</form>
Route nya
Route::get('/barang/import', [BarangController::class, 'import'])->name('barang.import');
Route::post('/barang/import', [BarangController::class, 'import_proses'])->name('barang.import.proses');
Button import untuk di view atau di menu
<a href="{{ route('barang.import') }}" class="btn btn-success">Import Excel</a>
Contoh format tabel di Excel yang akan di import
Kode Barang | Nama Barang | Harga Jual | Harga Beli | Satuan |
---|---|---|---|---|
001 | Laptop | 4500000 | 3000000 | Pcs |
002 | Mouse | 150000 | 120000 | Pcs |