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 Header
  • HeadingRowFormatter di set ke none, karena default nya menggunakan slug dari Laravel, jadi jika none bisa menggunakan nama header nya langsung
  • updateOrCreate merupakan fitur Laravel untuk melakukan insert jika data kosong, dan update jika data tersedia
  • Pada contoh diatas, where nya menggunakan kode dan nama, 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 header Kode 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 BarangNama BarangHarga JualHarga BeliSatuan
001Laptop45000003000000Pcs
002Mouse150000120000Pcs