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'));
}
}
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');
}
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 form upload file 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
Komentar 0