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 →
Compile PHP to Native Binaries with TypePHP image

Compile PHP to Native Binaries with TypePHP

Read article
State of Laravel 2026 Survey Is Now Open image

State of Laravel 2026 Survey Is Now Open

Read article
Testing Best Practices Skill in Laravel Boost v2.6.0 image

Testing Best Practices Skill in Laravel Boost v2.6.0

Read article
Query Binding Masking and whereBinary() in Laravel 13.27 image

Query Binding Masking and whereBinary() in Laravel 13.27

Read article
Laravel AI: Load Tools On Demand With ToolSearch image

Laravel AI: Load Tools On Demand With ToolSearch

Read article
Laravel Auditor Audits Your App With Your Own AI Agent image

Laravel Auditor Audits Your App With Your Own AI Agent

Read article