Tutorial Membuat Import & Export Excel di Laravel #3 : Proses Import


Tutorial Membuat Import & Export Excel di Laravel #3 : Proses Import

Tutorial Membuat Import & Export Excel di Laravel #3 : Proses Import - Halo teman-eman semuanya, di artikel sebelumnya kita sudah berhasil membuat database baru dan menjalankan migration.

Pada kesempatan kali ini kita semua akan belajar bagaimana cara membuat proses import dari file excel ke database di Laravel 6.

Langkah 1 - Install Library Laravel Excel

Langsung saja kita mulai, sebelumnya kita akan menggunakan library yang bernama Laravel Excel, sekarang kita akan menginstallnya terlebih dahulu, silahkan teman-teman jalankan perintah dibawah ini :

composer require maatwebsite/excel

Setelah proses installasi selesai, sekarang kita akan melakukan beberapa konfirgurasinya, silahkan teman-teman buka file config/app.php

Tambahkan kode berikut ini ke dalam providers

/*
 * Package Service Providers...
 */
Maatwebsite\Excel\ExcelServiceProvider::class,

Tambahkan juga kode berikut ini ke dalam aliases

'Excel' => Maatwebsite\Excel\Facades\Excel::class,

Setelah semuanya selesai, sekarang jalankan perintah dibawah ini untuk membuat config excelnya

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

Oke, sekarang kita akan membuat fungsi proses importnya menggunakan library yang sudah kita install sebelumnya, silahkan teman-teman jalankan perintah dibawah ini :

php artisan make:import UsersImport --model=User

Perintah di atas akan membuat sebuah proses import dengan menggunakan model User, karena pada praktek kali ini kita akan menggunakan data Users.

Setelah perintah di atas dijalankan, maka teman-teman akan menemukan sebuah file baru dengan nama UsersImport.php di dalam folder app/Imports.

Silahkan teman-teman buka file UsersImport.php dan ubahlah kodenya menjadi seperti berikut ini :

<?php

namespace App\Imports;

use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;

class UsersImport implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name'     => $row[0],
            'email'    => $row[1],
            'password' => Hash::make($row[2]),
        ]);
    }
}

Langkah 2 - Membuat Controller

Sekarang kita lanjutkan membuat controller untuk proses menampilkan data sekaligus membuat fungsi importnya, silahkan jalankan perintah dibwah ini :

php artisan make:controller UsersController

Jika berhasil, teman-teman akan menemukan sebuah file controller baru dengan nama UsersController.php di dalam folder app/Http/Controllers.

Silahkan buka file UsersController.php dan ubahlah kodenya menjadi seperti berikut ini :

<?php

namespace App\Http\Controllers;

use App\Imports\UsersImport;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Maatwebsite\Excel\Facades\Excel;

class UsersController extends Controller
{
    public function index()
    {
        $users = User::latest()->get();
        return view('data_users', compact('users'));
    }

    public function import(Request $request)
    {
        $this->validate($request, [
            'file' => 'required|mimes:csv,xls,xlsx'
        ]);

        $file = $request->file('file');

        // membuat nama file unik
        $nama_file = $file->hashName();

        //temporary file
        $path = $file->storeAs('public/excel/',$nama_file);

        // import data
        $import = Excel::import(new UsersImport(), storage_path('app/public/excel/'.$nama_file));

        //remove from server
        Storage::delete($path);

        if($import) {
            //redirect
            return redirect()->route('users.index')->with(['success' => 'Data Berhasil Diimport!']);
        } else {
            //redirect
            return redirect()->route('users.index')->with(['error' => 'Data Gagal Diimport!']);
        }
    }

}

Dari perubahan controller di atas, kita sudah berhasil menambahkan 2 funsgi baru, yaitu

  • index - fungsi ini kita gunakan untuk menampilkan data users dalam bentuk tabel beserta form untuk import data berupa modal bootstrap.

  • import - fungsi ini kita gunakan untuk proses import data dari file excel ke database kita, dari proses import ini kita akan mengupload sebuah file excel kemudian kita menyimpannya di dalam server. Setelah itu kita baca file excel tersebut sekaligus kita menginsertnya ke dalam database.

setelah data berhasil di masukkan ke database, file tersebut kita hapus dari server. Dalam setiap block kode sudah saya berikan komentar untuk mempermudah teman-teman dalam memahaminya.

Setelah kita berhasil membuat controller sekarang kita lanjutkan membuat sebuah view untuk menampilkan data berupa tabel dan membuat form untuk upload file excelnya.

Langakah 3 - Membuat View

Silahkan teman-teman buat file baru dengan nama data_users.blade.php di dalam folder resources/views dan masukkan kode berikut ini :

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="//cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css">
    <title>Data Users</title>
</head>
<body>

<div class="container" style="margin-top: 80px">
    <div class="row">
        <div class="col-md-12">
            @if($message = Session::get('success'))
                <div class="alert alert-success" role="alert">
                    {{ $message }}
                </div>
            @elseif($message =  Session::get('error'))
                <div class="alert alert-danger" role="alert">
                    {{ $message }}
                </div>
            @endif
            <div class="card">
                <div class="card-header">
                    DATA USERS
                </div>
                <div class="card-body">
                    <div class="button-action" style="margin-bottom: 20px">
                        <button type="button" class="btn btn-success" data-toggle="modal" data-target="#import">
                            IMPORT
                        </button>
                        <a href="" class="btn btn-primary btn-md">EXPORT</a>
                    </div>
                    <div class="table-responsive">
                        <table class="table table-bordered" id="table">
                            <thead>
                            <tr>
                                <th scope="col">NAMA LENGKAP</th>
                                <th scope="col">ALAMAT EMAIL</th>
                            </tr>
                            </thead>
                            <tbody>
                            @foreach ($users as $user)
                                <tr>
                                    <td>{{ $user->name }}</td>
                                    <td>{{ $user->email }}</td>
                                </tr>
                            @endforeach
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- modal -->
<div class="modal fade" id="import" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">IMPORT DATA</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
                @csrf
                <div class="modal-body">
                    <div class="form-group">
                        <label>PILIH FILE</label>
                        <input type="file" name="file" class="form-control" required>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">TUTUP</button>
                    <button type="submit" class="btn btn-success">IMPORT</button>
                </div>
            </form>
        </div>
    </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
<script src="//cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
<script>
    $(document).ready( function () {
        $('#table').DataTable();
    } );
</script>
</body>
</html>

Langkah 4 - Menambahkan Route

Terakhir kita akan menambahkan sebuah route untuk menampilkan data dan sekaligus proses import data excelnya. Tambahkan kode berikut ini di dalam routes/web.php

Route::get('/users', 'UsersController@index')->name('users.index');
Route::post('/users/import', 'UsersController@import')->name('users.import');

Sekarang kita bisa melihat project kita, silahkan teman-teman bisa mencobanya dengan mengetikkan http://localhost:8000/users

Maka jika berhasil tampilannya seperti berikut ini


Dan jika teman-teman klik import, maka teman-teman akan melihat modal atau popup untuk kita upload file excelnya, kurang lebih seperti berikut ini


Untuk format data excel yang akan kita gunakan kurang lebih seperti contoh berikut ini


Silahkan coba teman-teman lakukan proses import, jika berhasil maka kurang lebih hasilnya akan seperti berikut ini :


KESIMPULAN

Kita telah belajar bagaimana cara menginstall library excel di Laravel 6 dan membuat proses import dengan Laravel 6.

Jika teman-teman memiliki pertanyaan atau kebingungan saat mencobanya, silahkan bisa berkomentar di bawah ini artikel ini.

Terima Kasih


Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami