Tujuan
Seperti penggunaan Export Excel, pada umumnya saat ingin memulai pembuatan aplikasi, pengguna memiliki data yang cukup banyak sehingga akan memakan waktu jika diinput satu per satu melalui aplikasi.
Untuk mempersingkat waktu biasanya developer aplikasi menyediakan fitur Upload Data salah satunya menggunakan Excel.
Pada tutorial sebelumnya kita sudah bisa mengexport data ke Excel, sekarang kita akan membuat fitur File Upload Excel untuk memasukan data ke dalam database menggunakan library Laravel Excel.
Persiapan
- Installasi Project Laravel
- Konfigurasi Aplikasi & Database
- Install Library Laravel Export Laporan Excel
Untuk membuat model menggunakan php artisan, silahkan buka terminal atau cmd, kemudian masuk ke direktori project laravelnya, dan ketik perintah berikut.
php artisan make:model Student -m
-m adalah option perintah untuk sekaligus membuatkan file migration untuk table/model student.
app/Student.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { protected $fillable = ['fullname','address']; }
Persiapan Migrate Database Table Students
Ubah file database/migrations/xxx_create_students_table.php
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateStudentsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('students', function (Blueprint $table) { $table->increments('id'); $table->string('fullname'); $table->text('address'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('students'); } }
Jalankan Migrate Database Table Students
Untuk membuat table students jalankan perintah berikut:
php artisan migrate
Seharusnya sudah ada table students di database anda, jika ada kendala baca kembali tutorial Laravel Migration
Membuat Class Import Dalam Format Excel Dengan Laravel
Untuk membuat import excel laravel dengan package laravel excel ini, yang harus kita lakukan adalah membuat import nya terlebih dulu. sama pada saat seperti kita membuat export pada tutorial export excel sebelumnya.
buka terminal atau command line nya.
php artisan make:import StudentImport --model=Student
Di sini, import yang akan kita buat kita beri nama StudentImport.php dan model yang kita gunakan adalah model Student.php
Pada saat kita jalankan perintah di atas, laravel akan membuatkan file SiswaImport.php dalam folder app/Imports
Buka file StudentImport.php tersebut.
app/Imports/StudentImport.php
<?php namespace App\Imports; use App\Student; use Maatwebsite\Excel\Concerns\ToModel; class StudentImport implements ToModel { /** * @param array $row * * @return \Illuminate\Database\Eloquent\Model|null */ public function model(array $row) { return new Student([ 'fullname' => $row[1], 'address' => $row[2], ]); } }
Di sini kita atur urutan data yang akan kita import dengan urutan kolum yang ada pada table siswa.
Di sini kita atur urutan data yang akan kita import dengan urutan kolum yang ada pada table siswa.

Jadi untuk kolum fullname kita isi dengan kolom 0, kolum address kita isi dengan kolom 1.
Nantinya untuk proses import data excelnya, kita akan membuat sebuah tombol “IMPORT EXCEL”, dimana pada saat tombol tersebut diklik, kita akan memunculkan modal pop up. pada modal tersebut kita buatkan form input file excel.
Kemudian pada saat disubmit, maka data siswa yang ada dalam file excel tersebut semua kita simpan ke database. lebih tepatnya ke table siswa.
Buka file view student.blade.php yang sudah kita buat sebelumnya. karena kita akan menambahkan sebuah tombol untuk upload/import file excel.
resources/views/student.blade.php
<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>{{$title}}</title> <link rel="stylesheet" type="text/css" href="{{ asset('/css/app.css') }}"> </head> <body> <div id="app"> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <a class="navbar-brand" href="#">Navbar</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> </nav> <main class="py-4"> <div class="container"> <div class="card mt-5"> <div class="card-header text-center"> {{$title}} </div> <div class="card-body"> <button type="button" class="btn btn-primary m-2" data-toggle="modal" data-target="#importExcel"> IMPORT EXCEL </button> <table class="table table-bordered table-hover table-striped"> <thead> <tr> <th>Nama</th> <th>Alamat</th> </tr> </thead> <tbody> @foreach($list as $row) <tr> <td>{{ $row->fullname }}</td> <td>{{ $row->address }}</td> </tr> @endforeach </tbody> </table> <br/> Halaman : {{ $list->currentPage() }} <br/> Jumlah Data : {{ $list->total() }} <br/> Data Per Halaman : {{ $list->perPage() }} <br/> {{ $list->links() }} </div> </div> <!-- Import Excel --> <div class="modal fade" id="importExcel" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <form method="post" action="/student/import_excel" enctype="multipart/form-data"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Import Excel</h5> </div> <div class="modal-body"> {{ csrf_field() }} <label>Pilih file excel</label> <div class="form-group"> <input type="file" name="file" required="required"> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="submit" class="btn btn-primary">Import</button> </div> </div> </form> </div> </div> </div> </main> <footer class="container-fluid"> <p>© <a href="https://ombagoes.com">ombagoes.com</a>. 2019 - 2020</p> </footer> </div> </body> <script src="{{ asset('js/app.js') }}"></script> </html>
Route
Tambahkan route berikut
Route::post('/student', 'StudentController@index'); Route::post('/student/import_excel', 'StudentController@doimport');
Controller
Buat Controller StudentController
php artisan make:controller StudentController
app/Http/Controllers/StudentController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Student; use App\Imports\StudentImport; use Maatwebsite\Excel\Facades\Excel; class StudentController extends Controller { public function index() { return view('student', ['title'=>'Students','list'=>Student::paginate(5)]); } public function import_excel(Request $request) { $this->validate($request, [ 'file' => 'required|mimes:csv,xls,xlsx' ]); $file = $request->file('file'); $nama_file = rand().$file->getClientOriginalName(); $file->move('file_student',$nama_file); Excel::import(new StudentImport, public_path('/file_student/'.$nama_file)); return redirect('/student')->with('message','Data Siswa Berhasil Diimport!'); } }
Test Running
Jalankan project laravel kita menggunakan php artisan server, lalu buka web browser http://localhost:8000/student


