Terkadang kita butuh meng-import data yang ada di dalam file excel ke dalam database kita, nah pada kali ini saya mau sharing cara import data excel di Laravel dengan menggunakan Laravel Excel.
Okey langsung aja ya kita mulai.. Oia saya anggap kalian sudah menginstall modul Laravelnya ya.. kalau belum, kalian bisa cari-cari referensinya dari website resmi laravel disini. https://laravel.com/docs/9.x/installation
Membuat Database
Yang pertama kita lakukan adalah membuat database yang akan digunakan untuk menyimpan data yang telah kita import. Untuk nama databasenya terserah kalian, tapi kalian harus cocokan dengan file .env-nya, setelah itu jalankan query dibawah ini untuk membuat tabel peserta.
CREATE TABLE `peserta` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nama` varchar(50) DEFAULT NULL,
`no_wa` varchar(15) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Menginstall maatwebsite/excel Package
Untuk memakai library Laravel Excel, kita harus menginstallnya terlebih dahulu dengan menjalankan composser.
composer require maatwebsite/excel.
Laravel Excel adalah salah satu library yang bisa di gunakan untuk print, export, import data excel pada Laravel.
Menambah Konfigurasi di app.php
Untuk bisa memakai library Laravel Excel, kalian harus menambahkan beberapa konfigurasi.
Buka file app.php di folder app/config, lalu pada bagian providers tambahkan
Maatwebsite\Excel\ExcelServiceProvider::class,
dan pada bagian aliases tambahkan
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
Membuat View
Buat view yang akan digunakan untuk meng-upload file excel kalian, misalnya kita beri nama peserta.blade.php, dan masukkan code seperti dibawah.
<form method="POST" action="{{ route('upload-peserta.store') }}" enctype="multipart/form-data">
@csrf
<div>
File : <input type="file"name="file">
</div>
<br>
<div>
<button type="submit" >Kirim</button>
</div>
</form>
<div style="margin-top: 20px">
List Data
<table style="margin-top: 10px; text-align: left">
<tr>
<th width="100px">Nama</th>
<th width="100px">No. WA</th>
<th width="100px">Email</th>
</tr>
@foreach($data as $row)
<tr>
<td>{{ $row->nama }}</td>
<td>{{ $row->no_wa }}</td>
<td>{{ $row->email }}</td>
</tr>
@endforeach
</table>
</div>
Pada bagian list data, disitu kita akan menampilkan data yang berhasil kita import.
Membuat Route
Buat route untuk menampilkan halaman upload yang sudah dibuat sebelumnya. Untuk route halaman upload dan list data contohnya seperti dibawah.
Route::get('peserta', [PesertaController::class, 'index']);
dan untuk route import data contohnya seperti dibawah.
Route::post('upload-peserta', [PesertaController::class, 'store'])->name('upload-peserta.store');
Dan jangan lupa kalian load controllernya dulu dengan memasukkan code di bawah use Illuminate\Support\Facades\Route;
dengan memasukkan code berikut.
use App\Http\Controllers\PesertaController;
Membuat Model
Buat model yang akan digunakan untuk mendefinisikan table kalian, dengan menjalankan composser.
php artisan make:model Peserta
file model Peserta.php akan terbuat di dalam folder app/Models. Lalu masukkan code berikut.
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Peserta extends Model
{
use HasFactory;
protected $table = 'peserta';
protected $primaryKey = 'id';
protected $guarded = [];
public $timestamps = false;
}
Membuat Import Class
Buat file class import yang akan digunakan untuk meng-import data excel kita ke dalam database dengan menjalankan composser.
php artisan make:import ImportPeserta --model=Peserta
File ImportExcel.php akan terbuat didalam folder app/Imports. Lalu masukkan code berikut.
namespace App\Imports;
use App\Models\Peserta;
use Maatwebsite\Excel\Concerns\ToModel;
class ImportPeserta implements ToModel
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Peserta([
'nama' => $row[0],
'no_wa' => $row[1],
'email' => $row[2],
]);
}
}
Membuat Controller
Buat controller yang akan digunakan untuk mengolah data yang kita import, dengan menjalankan composser
php artisan makes: controller PesertaController
buka file PesertaController.php di dalam folder app/Http/Controllers lalu isikan code berikut.
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Imports\ImportPeserta;
use App\Models\Peserta;
use Maatwebsite\Excel\Facades\Excel;
class PesertaController extends Controller
{
public function index(){
$data = Peserta::all();
return view('peserta', compact('data'));
}
public function store(Request $request){
$import = Excel::import(new ImportPeserta(), $request->file);
if($import){
return redirect('peserta');
}
}
}
Nah.. jika sudah selesai semua, silahkan kalian coba.. semoga berhasil.