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 →
VMPal: Give Your AI Agent a Whole Computer image

VMPal: Give Your AI Agent a Whole Computer

Read article
Synapse: A Dev Dashboard for Laravel AI SDK Agents image

Synapse: A Dev Dashboard for Laravel AI SDK Agents

Read article
Decide with Jev: Three Questions in One Request with the Laravel AI SDK image

Decide with Jev: Three Questions in One Request with the Laravel AI SDK

Read article
Grant: Enum-Based Roles and Permissions for Laravel image

Grant: Enum-Based Roles and Permissions for Laravel

Read article
Securing Filament plugins with Plumb image

Securing Filament plugins with Plumb

Read article
LayaPHP: Self-Hosted Text Classification for PHP and Laravel image

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Read article