yovangga / laravel-chunk-process
Laravel Library For Background chunks
Package info
github.com/DKA-Laravel-Library/DKA-Laravel-Chunk-Process
pkg:composer/yovangga/laravel-chunk-process
Fund package maintenance!
Requires
- php: ^8.3
- illuminate/support: ^10.0||^11.0||^12.0||^13.0
Requires (Dev)
- larastan/larastan: ^3.9
- laravel/pao: ^1.0
- laravel/pint: ^1.29
- orchestra/testbench: ^10.0||^11.0
- pestphp/pest: ^4.6||^5.0
- pestphp/pest-plugin-laravel: ^4.1||^5.0
- pestphp/pest-plugin-type-coverage: ^4.0||^5.0
- phpstan/extension-installer: ^1.4
README
Laravel Chunk Process
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.