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
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 -mPerintah tersebut akan membuat 1 file Model dan 1 file Migrasi
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
Jika Anda memeriksa di database, maka tabel siswa harus dibentuk dengan struktur sebagai berikut
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 SiswaControllerNanti 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_0Sekarang jika Anda mengakses url
Sehingga akan muncul sebagai berikut
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
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.php2../app/Models/Siswa.php ../database/migrations/2021_08_27_135345_create_siswas_table.php3Dalam tampilan, kami menambahkan formulir di atas tabel daftar siswa
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
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_4Rute 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
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_6Cukup 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.php8../app/Models/Siswa.php ../database/migrations/2021_08_27_135345_create_siswas_table.php9- 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
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; } 0Yang 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