Laravel 8 Tutorial Export dan Import Excel

Laravel 8 Tutorial Export dan Import Excel

sobatcoding.com - Export dan Import Excel Ke Dalam Database Menggunakan Laravel 8

Artikel kali ini kita akan mencoba membuat fitur export dan import excel menggunakan Laravel 8 dan library maatwebsite/excel. 

Untuk dokumen lengkap tentang maatwebsite/excel kalian bisa membaca sendiri di link berikut https://docs.laravel-excel.com/3.1/getting-started/installation.html

 

Untuk table kita akan membuat table bernama table products, dan model bernama Product.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;
    protected $table = 'products';
    protected $primaryKey = 'id';

    protected $fillable = ['code', 'name', 'unit', 'price', 'stock'];
    public $timestamps = true;
}

 

Selanjutnya kita buat dahulu controller bernama ProductController.php dan masukkan kode seperti berikut

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

use App\Models\Product;
use App\Imports\ProductImport;
use App\Exports\ProductExport;
use Maatwebsite\Excel\Facades\Excel;

class ProductController extends Controller
{
    public function index(Request $request)
    {
        $product = Product::orderBy('name')->paginate(15);

        return view('product.index', compact('product'));
    }

}

 

Export Excel

Untuk export excel kita buat dahulu file bernama ProductExport.php dan simpan di folder app/Exports/ProductExport.php, masukkan kode berikut

<?php

namespace App\Exports;

use App\Models\Product;
use Maatwebsite\Excel\Concerns\FromCollection;

class ProductExport implements FromCollection
{
    public function collection()
    {
        return Product::select('id', 'code', 'name', 'unit', 'price', 'stock')->get();
    }

}

 

Tambahkan method di dalam controller ProductController untuk export ke dalam excel

public function exportExcel(Request $request)
{
        return Excel::download(new ProductExport, 'data-produk-'. time().'.xlsx'); 
}

 

Import Excel

Untuk export excel kita buat dahulu file bernama ProductImport.php dan simpan di folder app/Imports/ProductImport.php, masukkan kode berikut

<?php
 
namespace App\Imports;
 
use App\Models\Product;
use Maatwebsite\Excel\Concerns\ToModel;

class ProductImport implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        if( $row[0] != "KODE") { //skip untuk header table

            return new Product([
                'code' => $row[0],
                'name' => $row[1], 
                'unit' => $row[2],
                'price' => $row[3],
                'stock' => $row[4]
            ]); 
            
        }
    }
}

 

Tambahkan method di dalam controller ProductController untuk import file excel

public function importExcel(Request $request)
    {
        if ($request->ajax()) {
            
            $validator = Validator::make($request->all(), [
                'excel' => 'required|mimes:csv,xls,xlsx',
            ],
            [
                'required'  => ':attribute harus diisi',
                'mimes'  => ':attribute harus format Excel',
            ]);
     
            if ($validator->fails()) {
    
                return response()->json(['success' => false, 'message' => $validator->errors()->first()], 422);
            }

            // menangkap file excel
            $file = $request->file('excel');
    
            // membuat nama file unik
            $nama_file = rand()."_".$file->getClientOriginalName();
    
            // upload ke folder files di dalam folder public
            $file->move( public_path('files/'),$nama_file);
    
            // import data
            $filePath = public_path('/files/'.$nama_file);
            Excel::import(new ProductImport, $filePath);

            unlink($filePath); //hapus file

            return response()->json(['success' => true, 'message' => 'Data produk berhasil diupload']);
            
        }

        return view('product.index');
    }

 

Untuk import file, file yang akan kita import akan tersimpan terlebih dahulu di folder public/files dan akan dibaca oleh fungsi Excel:import. Setelah file selesai dibaca kemudian otomatis akan dihapus menggunakan unlink($filePath).

Untuk template file excel seperti berikut

 

Halaman index produk

Halaman Index Produk

 

Halaman form upload file excel

Form Import Excel

 

Selamat mencoba. Semoga artikel ini bermanfaat.

Jika teman-teman memiliki pertanyaan atau saran mengenai artikel ini, jangan ragu untuk meninggalkan komentar pada form di bawah