February 4, 2024 laravel

Menambahkan Progress Bar di Laravel Database Seeder

Laravel menyediakan fitur progress bar yang dapat menampilkan progres dari apa yang sedang dilakukan dalam bentuk bar.

Biasanya progress bar dilakukan di artisan command.

Di database seeder juga bisa ditambahkan progress bar melalui $this->command->getOutput(). Progress bar tersebut bisa dimanipulasi dengan 3 method:

  • progressStart untuk membuat dan memulai progress bar
  • progressAdvance untuk menambahkan bar pada progres
  • progressFinish untuk mengakhiri progres

Contoh, berikut seeder laravel yang akan membuat 100 user dari factory. Akan ada progress bar yang akan bertambah setiap 1 user disimpan.

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Helper\ProgressBar;
use App\Models\User;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $amount = 100;

        $this->command->getOutput()->progressStart($amount);

        User::factory($amount)->make()->each(function ($user) {
            $this->command->getOutput()->progressAdvance();

            $user->save();

            sleep(1);
        });

        $this->command->getOutput()->progressFinish();
    }
}

Di progressStart, bisa dimasukkan angka untuk mengatur maksimal dari progress bar.

Di progressAdvance, bisa dimasukkan angka untuk berapa bar yang akan ditambahkan, default 1.

Sumber