yovangga/laravel-chunk-process

Laravel Library For Background chunks

Maintainers

Package info

github.com/DKA-Laravel-Library/DKA-Laravel-Chunk-Process

Homepage

pkg:composer/yovangga/laravel-chunk-process

Transparency log

Fund package maintenance!

yovangga-anandhika

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.1 2026-08-08 06:17 UTC

This package is auto-updated.

Last update: 2026-08-08 06:22:04 UTC


README

Laravel Chunk Process

Packagist PHP from Packagist Laravel versions GitHub Workflow Status (main) Total Downloads

Laravel Library For Background chunks

Installation

You can install the package via Composer:

composer require yovangga/laravel-chunk-process

Contoh Job

Buat job terlebih dahulu di aplikasi, misalnya app/Jobs/ProsesImporDataJob.php:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ProsesImporDataJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public $chunk)
    {
    }

    public function handle(): void
    {
        foreach ($this->chunk as $row) {
            // proses setiap baris data di sini
        }
    }
}

Contoh job batch/item:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ProsesItemDataJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public mixed $item)
    {
    }

    public function handle(): void
    {
        // proses item di sini
    }
}

Contoh job multi-step:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ProsesLangkahPertamaJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public mixed $model)
    {
    }

    public function handle(): void
    {
        // langkah pertama
    }
}

class ProsesLangkahKeduaJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public mixed $model)
    {
    }

    public function handle(): void
    {
        // langkah kedua
    }
}

You may publish all of the package's resources at once:

php artisan vendor:publish --tag="laravel-chunk-process"

Or, you may publish each resource individually:

Publishing the Configuration File

php artisan vendor:publish --tag="laravel-chunk-process-config"

Publishing and Running the Migrations

php artisan vendor:publish --tag="laravel-chunk-process-migrations"
php artisan migrate

Publishing the Views

php artisan vendor:publish --tag="laravel-chunk-process-views"

Publishing the Translations

php artisan vendor:publish --tag="laravel-chunk-process-lang"

Publishing the Public Assets

php artisan vendor:publish --tag="laravel-chunk-process-assets"

Usage

1. Chunk data and dispatch jobs

use App\Jobs\ProsesImporDataJob;
use App\Models\DataMentah;
use LaravelChunkProcess\LaravelChunkProcess\Facades\LaravelChunkProcess;

DataMentah::chunk(1000, function ($chunk) {
    ProsesImporDataJob::dispatch($chunk);
});

Atau gunakan helper package untuk memproses sumber data model / query:

use App\Jobs\ProsesImporDataJob;
use App\Models\DataMentah;
use LaravelChunkProcess\LaravelChunkProcess\Facades\LaravelChunkProcess;

LaravelChunkProcess::chunk(DataMentah::class, 1000, function ($chunk) {
    ProsesImporDataJob::dispatch($chunk);
});

2. Buat batch dengan then / catch

use Illuminate\Support\Facades\Bus;
use App\Jobs\ProsesItemDataJob;

$batch = Bus::batch([
    new ProsesItemDataJob($item1),
    new ProsesItemDataJob($item2),
    // ...
])->then(function ($batch) {
    // Semua data selesai diproses.
})->catch(function ($batch, Throwable $e) {
    // Ada job yang gagal.
})->dispatch();

return response()->json(['batch_id' => $batch->id]);

3. Proses multi-step untuk model

use App\Jobs\ProsesLangkahPertamaJob;
use App\Jobs\ProsesLangkahKeduaJob;
use App\Models\DataMentah;
use LaravelChunkProcess\LaravelChunkProcess\Facades\LaravelChunkProcess;

$model = DataMentah::find($id);

$batch = LaravelChunkProcess::stepsForModel($model, [
    ProsesLangkahPertamaJob::class,
    fn (DataMentah $model) => new ProsesLangkahKeduaJob($model),
])->dispatch();

return response()->json(['batch_id' => $batch->id]);

Gunakan stepsForModel() untuk membuat urutan job yang menerima instance model, lalu jalankan sebagai satu batch.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Thank you for considering contributing to Laravel Chunk Process! Please review our contributing guide to get started.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

Laravel Chunk Process is open-sourced software licensed under the MIT license.