Laravel Tutorials

Cleaner Queue Chains with Laravel's Enum Integration

Published
Cleaner Queue Chains with Laravel's Enum Integration image

Laravel now supports direct use of backed enums with the Bus facade's onQueue method, eliminating the need to manually access the enum's value property. This improvement creates cleaner, more expressive code when working with job chains and queues.

This enhancement is particularly useful when building complex job pipelines that need to be directed to different queues based on priority, resource requirements, or business logic.

use App\Enums\QueueType;
 
// Use enum directly without ->value
Bus::chain($jobs)
->onQueue(QueueType::Background)
->dispatch();

Here's a practical example of implementing a document processing system:

<?php
 
namespace App\Enums;
 
enum ProcessingQueue: string
{
case Immediate = 'realtime';
case Standard = 'default';
case Batch = 'batch-process';
case LowPriority = 'low-priority';
}
 
namespace App\Services;
 
use App\Enums\ProcessingQueue;
use App\Jobs\ProcessDocument;
use App\Jobs\GenerateThumbnail;
use App\Jobs\ExtractMetadata;
use App\Jobs\NotifyUser;
use App\Models\Document;
use Illuminate\Support\Facades\Bus;
 
class DocumentProcessor
{
public function process(Document $document, bool $isPriority = false)
{
$queue = $isPriority
? ProcessingQueue::Immediate
: ProcessingQueue::Standard;
 
Bus::chain([
new ProcessDocument($document),
new ExtractMetadata($document),
new GenerateThumbnail($document),
new NotifyUser($document->user, 'Document processing complete')
])
->onQueue($queue)
->dispatch();
 
return $document;
}
 
public function batchProcess(array $documentIds)
{
foreach ($documentIds as $id) {
$document = Document::find($id);
 
Bus::chain([
new ProcessDocument($document),
new GenerateThumbnail($document)
])
->onQueue(ProcessingQueue::Batch)
->dispatch();
}
}
}

This enhancement simplifies your queue implementation while maintaining type safety and improving code readability.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article