Cara menggunakan impor batch excel laravel

Import Excel Laravel - Hallo semuanya, setelah sebelumnya kita belajar cara export data ke excel dari mysql, sekarang kita akan coba melakukan sebaliknya yaitu import data ke mysql melalui file excel

Fitur ini terkadang dibutuhkan oleh klien ketika mereka baru saja melakukan migrasi sistem dan ingin mentransfer data lama ke sistem baru

Biasanya digunakan untuk memasukkan berbagai jenis data master seperti data karyawan, pemasok, atau pelanggan yang jumlahnya bisa mencapai ribuan

Kemudian karena tidak mungkin mereka transfer dengan menginput ulang datanya satu per satu, diperlukan modul importir seperti ini dengan ketentuan template excel yang sudah disediakan.

Oke langsung saja kita mulai latihannya. Ada beberapa hal yang perlu kita persiapkan, jadi mari kita mulai persiapannya terlebih dahulu

Daftar isi

Persiapan

Langkah pertama yang perlu Anda lakukan adalah

Instalasi Laravel

Dalam hal ini versi laravel yang saya gunakan adalah versi 8, untuk cara instalasinya bisa mengikuti panduan pada halaman resminya disini

Sedang tren

Tutorial Lengkap Integrasi Laravel Dengan Payment Gateway Xendit

Instalasi paket

Untuk package kita masih menggunakan package yang sama seperti pada tutorial sebelumnya yaitu MaatWebsite Laravel/Excel versi 3

Untuk cara pemasangannya bisa dilihat di tutorial (How to Export Excel Laravel)

Basis data

Setelah instalasi laravel dan package selesai, sekarang anda buat databasenya terlebih dahulu, untuk nama databasenya anda bisa melakukan apa saja sesuai dengan keinginan anda

Setelah itu, silahkan hubungkan database dengan proyek Laravel Anda melalui sebuah file. env, seperti pada gambar berikut

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

Untuk username dan password silahkan sesuaikan sendiri dengan akun mysql anda sendiri. Jika tidak ada kata sandi, kosongkan saja kolom DB_PASSWORD

Buat Tabel Siswa

Setelah database terhubung, sekarang kita coba membuat tabel siswa terlebih dahulu

Kenapa harus mahasiswa?

Kami membuat tabel melalui migrasi, pada saat yang sama kami juga membuat model untuk mewakili tabel, silakan di CMD/Terminal Anda menjalankan perintah sebagai berikut

php artisan make:model Siswa -m

Perintah tersebut akan membuat 1 file Model dan 1 file Migrasi

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
_

Modifikasi file model Student sebagai berikut dengan menambahkan 2 properti yaitu properti guarded dan timestamps

<?php

namespace App\Models;

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

class Siswa extends Model
{
    use HasFactory;

    protected $guarded = [];
    public $timestamps = false;
}

dilindungi $dijaga = [];

publik $timestamps = false;

Dalam file migrasi, Anda mengisi yang berikut ini

public function up()
{
    Schema::create('siswas', function (Blueprint $table) {
        $table->id();
        $table->string('nama')->nullable();
        $table->string('no_hp')->nullable();
        $table->string('email')->nullable();
        $table->text('alamat');
    });
}

Kemudian jalankan perintah

php artisan migrate
_

Setelah itu, akan ada beberapa file dan tabel yang sudah dimigrasikan, salah satunya adalah tabel graduate

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

Jika Anda memeriksa di database, maka tabel siswa harus dibentuk dengan struktur sebagai berikut

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

Tampilkan Data Siswa Terlebih Dahulu

Nah, setelah semua persiapan selesai, kita akan membuat modul daftar siswa terlebih dahulu

Silakan buat rute baru terlebih dahulu di file web. php, lalu tambahkan rute baru sebagai berikut

../routes/web.php
....
use App\Http\Controllers\SiswaController;
....

Route::get('siswa/list', [SiswaController::class, 'index']);

Rute di atas memiliki spesifikasi sebagai berikut

  • Metode Dapatkan
  • URL-nya adalah siswa/daftar
  • Pengontrolnya adalah SiswaController
  • fungsinya adalah indeks

Sekarang Anda membuat SiswaController dengan menjalankan perintah

php artisan make:controller SiswaController

Nanti posisi dari file SiswaController ada di. /app/Http/Controllers/StudentController. php

Buka saja dan tambahkan fungsi indeks sebagai berikut

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Siswa;

class SiswaController extends Controller
{
    public function index()
    {
        $data = Siswa::all();

        return view('siswa.index', compact('data'));
    }
}
_

Coba lihat script di atas

  • Di baris ke-7 kita sebut model Siswa
  • Baris ke 11 kita buat fungsi index
  • Pada fungsi indeks terdapat variabel data yang mencakup semua data siswa
  • Kemudian pada baris ke-15 kita mengarahkannya ke tampilan/indeks siswa dengan juga meneruskan variabel data

Sekarang kita buat tampilan filenya, kita taruh di folder

../resources/views/siswa/index.blade.php
_

Dan coba isi sebagai berikut

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
_0

Sekarang jika Anda mengakses url

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
_1

Sehingga akan muncul sebagai berikut

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

Jika Anda mengaksesnya, halaman tersebut tidak memiliki konten apa pun, hanya headernya saja, karena databasenya masih kosong

Nanti kita isi datanya via excel import

Mulai mengimpor data

Nah sekarang kita akan mulai untuk modul importnya, nanti akan saya jelaskan dengan berbagai cara, kita mulai dari dasar dulu

Namun sebelumnya pada halaman daftar siswa, Anda terlebih dahulu menambahkan tombol untuk proses impor data,

Penggunaan Dasar

Hal pertama yang perlu kita lakukan adalah membuat format excel terlebih dahulu, silahkan lakukan seperti pada gambar di bawah ini

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

 

Untuk header silahkan sesuaikan seperti pada gambar diatas (nama, no_hp, email, alamat). tapi kalo buat body silahkan custom sendiri, data bebas mau apa aja

Kemudian selanjutnya kita tambahkan form untuk upload file excel pada halaman daftar siswa, anda buka file view index dan ubah seperti berikut

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
2
../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
3

Dalam tampilan, kami menambahkan formulir di atas tabel daftar siswa

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

 

Form mengarah ke url "/siswa/import" dan menggunakan metode POST, yang nantinya akan kita buat rutenya di file web. php

Untuk jenis inputnya yaitu file type, dan namanya juga file

Jika Anda me-refresh halaman daftar siswa, akan muncul sebagai berikut

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

Sekarang kami membuat rute baru untuk menangani proses impor data, di file web. php silakan tambahkan sebagai berikut

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
_4

Rute tersebut memiliki spesifikasi sebagai berikut

  • metode POST
  • URL mengarah ke /students/import
  • Masih menggunakan controller yang sama yaitu SiswaController
  • Fungsi mengarah ke import_excel

Kemudian untuk dapat mengimport data, kita perlu membuat file di dalam folder ". /aplikasi/Impor”. Nanti di dalam folder tersebut kita akan menempatkan berbagai class untuk proses import data

Kita bisa membuatnya dengan menjalankan perintah berikut

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
_5

Nah, perintah tersebut akan membuat file impor baru yang ada di dalam folder tersebut

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
_6

Cukup buka file SiswasImport, dan ubah sebagai berikut

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
_7
  • Di baris ke-5, kami menyebut model Siswa
  • Pada baris ke-19 kita perlihatkan baris variabel, isi baris variabel ini adalah data yang ada di file excel
  • Lalu karena ada header di excel kita, maka header ini tidak akan dimasukkan ke dalam database, karena kita sudah memanggil Class WithHeadingRow pada baris ke-8 dan sudah diimplementasikan di Kelas SiswasImport
  • Baris ke-21 adalah proses penyisipan data

Sekarang buka file SiswaController, dan tambahkan fungsi import_excel sebagai berikut

../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
8
../app/Models/Siswa.php
../database/migrations/2021_08_27_135345_create_siswas_table.php
9
  • Pada baris ke-8, kita sebut Class SiswasImport yang telah kita buat sebelumnya
  • Pada baris ke-9 kita sebut Kelas Excel
  • Baris ke 20 kita buat function baru dengan nama import_excel, yang berisi proses import data

Nah setelah itu, sekarang coba anda jalankan importernya, pada halaman daftar siswa anda pilih file excelnya, lalu klik tombol import

Jika berhasil, maka kita akan diarahkan kembali ke halaman daftar siswa, dan akan muncul data yang baru saja kita impor

Cara menggunakan impor batch excel laravel
Cara menggunakan impor batch excel laravel

Posisi Header Kustom

Terkadang di file excel kita, posisi header tidak selalu berada di baris ke-1, terkadang di baris ke-2 atau ke-3

Jika Anda menemukan kondisi tersebut, maka Anda perlu melakukan beberapa modifikasi pada file SiswasImport

<?php

namespace App\Models;

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

class Siswa extends Model
{
    use HasFactory;

    protected $guarded = [];
    public $timestamps = false;
}
0

Yang harus Anda lakukan adalah menambahkan fungsi headingRow dan kembali dengan angka yang mewakili posisi baris dari posisi headernya

Batasi Impor Data

Terkadang kita ingin membatasi jumlah data yang masuk ke database

Katakanlah misalnya, kita memiliki ribuan data di file excel, tetapi kita hanya ingin mengimpor 100 data

Untuk dapat melakukannya, kita dapat mengimplementasikan Class WithBatchInserts pada file SiswasImport seperti berikut

<?php

namespace App\Models;

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

class Siswa extends Model
{
    use HasFactory;

    protected $guarded = [];
    public $timestamps = false;
}
1
  • Pada baris ke-9 kita sebut Class WithBatchInserts
  • Di baris ke-11 kami menerapkan Kelas
  • Pada baris ke-31 kita membuat fungsi bernama batchSize() untuk menentukan berapa banyak data yang ingin kita impor

Bacaan Sepotong

Ketika kita membaca sebuah file excel dengan ukuran yang sangat besar yang mungkin memiliki 1 juta baris data, pasti akan berdampak pada penggunaan memori server yang berlebihan.

Bahkan jika server tidak mampu menanganinya, error 500 Server TimeOut akan muncul

Untuk mengatasinya, Anda bisa menggunakan metode Chunk Reading

Chunk ini akan membagi data yang besar menjadi beberapa bagian, misalkan kita memiliki 10 ribu data, maka kita membaginya menjadi 10 bagian yang masing-masing bagian memiliki 1 ribu data

Sehingga dengan begitu, sistem tidak akan langsung mendapatkan 10 ribu data, melainkan hanya mendapatkan data sebanyak 10 kali saja

Untuk cara menggunakannya, Anda perlu memodifikasi fie SiswasImport sebagai berikut

<?php

namespace App\Models;

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

class Siswa extends Model
{
    use HasFactory;

    protected $guarded = [];
    public $timestamps = false;
}
2
  • Di baris ke-9 kami memanggil kelas WithChunkReading
  • Kemudian implementasikan pada baris ke-11
  • Dan pada baris ke 31 kita membuat fungsi yang disebut chunkSize untuk menentukan jumlah data Chunk

Kata Akhir

Terima kasih telah mengikuti seri tutorial Import Excel Laravel lengkap

Semoga bermanfaat. dan jika anda merasa ada kesulitan silahkan berkomentar pada kolom di bawah ini

Terima kasih

Dukung Kami

Jika artikel ini bermanfaat bagi Anda, membantu menyelesaikan masalah yang Anda hadapi, Anda juga dapat mendukung kami dengan mengunjungi halaman berikut. https. //saweria. co/sangcahayaid