DEV Community

Cover image for Cara Upload Banyak Data Sekaligus Dengan Laravel
MedanInCode
MedanInCode

Posted on

Cara Upload Banyak Data Sekaligus Dengan Laravel

Cara Upload Banyak Data Sekaligus Dengan Laravel.Pada tutorial kali ini kita akan membandingkan dua cara pertama menggunakan fungsi mysql LOAD DATA LOCAL dan yang kedua package composer league/csv.Cara pertama adalah yang paling cepat ,yang ada saat ini untuk import csv ukuran besar.

Tetapi terkadang hosting tidak support untuk cara pertama,terutama yang bersifat shared hosting dengan alasan keamanan ucap support hosting.Jadi karena kemaren team medanincode juga terkena kendala kita cari alternatif lain yang sudah dicoba dan lumayan cepat ,menggunakan package league/csv.

Disini kita juga akan membandingkan kecepatan keduanya.Untuk membandingkan kita punya file csv dengan format seperti dibawah ini ,dengan jumlah data 100.000 baris.Kita akan mengukur kecepatan insert dengan menggunakan LOAD DATA LOCAL dan package league/csv.

Big data 1

LOAD DATA LOCAL INFILE

Untuk mengecheck apakah hosting kita support LOAD DATA LOCAL,bisa tulis query dibawah ini di phpmyadmin atau sejenisnya.

SHOW GLOBAL VARIABLES LIKE 'local_infile';
Enter fullscreen mode Exit fullscreen mode

Dan pastikan juga settingan di config/database.php bagian connections mysql pada options ada perintah seperti dibawah ini.

<?php
....
'options'        => extension_loaded('pdo_mysql') ? array_filter([
    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    PDO::MYSQL_ATTR_LOCAL_INFILE => true,
]) : [],
Enter fullscreen mode Exit fullscreen mode

Untuk penggunaannya LOAD DATA LOCAL di laravel seperti code dibawah ini.

<?php
....
public function store_load(Request $request){
        $pathname = $request->file('report_file')->getPathName();
        $query = '
            LOAD DATA LOCAL INFILE "'.$pathname.'"
            INTO TABLE persons
            FIELDS TERMINATED by \',\'
            OPTIONALLY ENCLOSED BY \'"\'
            LINES TERMINATED BY \'\n\'
            IGNORE 1 LINES
            (@col1,@col2,@col3) 
            set 
            nama="@col1",umur="@col2",jk="@col3"';
        $time_start = microtime(true); 
        $result  = DB::statement($query);
        $time_end = microtime(true);
        $execution_time = ($time_end - $time_start);
        echo '<b>Total Execution Time:</b> '.($execution_time).' seconds';
    }
Enter fullscreen mode Exit fullscreen mode

@col1 sampai @col3 adalah jumlah dari kolom yang akan kita ambil dari csv.FIELDS TERMINATED by adalah jenis separator yang digunakan oleh file csv. IGNORE 1 LINES untuk skip baris pertama dari file csv ,karena hanya berisi judul baris.

league/csv

League/csv sendiri adalah salah satu package untuk mengolah csv di php untuk informasi lebih bisa kunjungi di (https://csv.thephpleague.com/).
Untuk instalasinya sama seperti package composer lainnya.

composer require league/csv
Enter fullscreen mode Exit fullscreen mode

Untuk penggunaannya ,pertama tambahkan script dibawah di bagian atas.

.....

Untuk versi lengkap tutorial kunjungi https://medanincode.com.
Originally published at https://medanincode.com.

Discussion (0)