andriajah Sat Aug 2022 1 year ago

Cara Import Large CSV File ke Database Hanya dalam Sekejap di Laravel

Laravel mengimport file csv data besar dalam contoh database mysql, Dalam tutorial ini Anda akan belajar cara mengimpor catatan file CSV yang besar dan besar dalam aplikasi laravel menggunakan seeder database.

Sering kali kami memiliki ribuan atau jutaan catatan atau file CSV dan kami ingin menyimpan catatan tersebut di database kami sehingga kami menggunakan pekerjaan cron atau antrian untuk itu. Tetapi jika kita ingin mengimpor file CSV hanya satu kali maka kita menggunakan seeder database untuk mengimpor record ke database.

Waktu maksimum ketika kami menggunakan fungsi impor untuk menyimpan data besar, menunjukkan waktu eksekusi yang maksimal, karena file besar dan aplikasi tidak dapat menangani permintaan maksimum satu kali. Jadi di sini kami telah menambahkan kode contoh brilian untuk menyisipkan baris besar file csv dalam database hanya dalam 2-3 detik dengan aplikasi php laravel.

Langkah 1: Instal Aplikasi Laravel

Pertama buat aplikasi laravel baru dengan menambahkan perintah berikut di terminal.

composer create-project --prefer-dist laravel/laravel laravel-app

Masuk ke aplikasi

cd laravel-app

Langkah 2: Hubungkan Aplikasi ke Database

Buka  file .env  dan tambahkan kredensial basis data Anda seperti nama basis data, nama pengguna, kata sandi yang sama pentingnya:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db name
DB_USERNAME=db user name
DB_PASSWORD=db password

Langkah 3: Buat Migrasi dan Model

Langkah selanjutnya, kita perlu menjalankan perintah berikut di terminal untuk menghasilkan model, file migrasi menggunakan perintah berikut:

php artisan make:model Community -m

Tambahkan kode di  database/migrations/create_communities_table.php:

public function up()
{
    Schema::create('communities', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('state');
        $table->string('community');
        $table->string('district');
        $table->timestamps();
    });
}

Selanjutnya, buka command prompt dan jalankan perintah berikut untuk membuat tabel ke dalam database:

php artisan migrate

Tempatkan kode di bawah ini di  file app/Models/Community.php:

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
 
class Community extends Model
{
    use HasFactory;
    protected $guarded = [];
}

 

Langkah 4: Buat Seeder

Pertama, Anda perlu menjalankan perintah berikut untuk menghasilkan file seeder untuk mengunggah file csv besar besar di database hanya dalam hitungan detik.

php artisan make:seeder CommunitySeeder

Langkah 5: Perbarui Kode di Seeder

Sekarang perbarui kode untuk mengimpor garis besar csv baik di laravel atau aplikasi php. Buka file database\seeders\CommunitySeeder.php Anda dan letakkan kode di bawah ini di atasnya;

<?php

  namespace Database\Seeders;

  use Illuminate\Database\Seeder;
  use App\Models\LocalCommunity;
  use Illuminate\Support\Facades\DB;
  use Illuminate\Support\LazyCollection;

  class CommunitySeeder extends Seeder 
  {
  /**
  * Run the database seeds.
  *
  * @return void
  */
  public function run()
  {
    DB::disableQueryLog();
    DB::table('local_communities')->truncate();

    LazyCollection::make(function () {
      $handle = fopen(public_path("comunities.csv"), 'r');
      
      while (($line = fgetcsv($handle, 4096)) !== false) {
        $dataString = implode(", ", $line);
        $row = explode(';', $dataString);
        yield $row;
      }

      fclose($handle);
    })
    ->skip(1)
    ->chunk(1000)
    ->each(function (LazyCollection $chunk) {
      $records = $chunk->map(function ($row) {
      return [
        "state" => $row[0],
        "community" => $row[1],
        "district" => $row[2]
      ];
      })->toArray();
      
      DB::table('communities')->insert($records);
    });
  }
}

 

Langkah 6: Jalankan Seeder dan Uji

Sekarang, jalankan aplikasi Anda menggunakan perintah berikut;

php artisan serve

Selanjutnya, jalankan seeder menggunakan perintah di bawah ini;

php artisan db:seed --class=CommunitySeeder

Sekarang periksa database Anda, ini menunjukkan semua catatan file csv.

example import large csv file laravel laravel 9 laravel