jeffersongoncalves/laravel-queue-management
Laravel Queue Management adds tools to monitor and manage your application's queues, including viewing pending and failed jobs, retrying or deleting failures, and keeping background workers healthy. A lightweight way to gain queue visibility and control without extra infrastructure.
forget() identifier fix is a correctness (and on MySQL, a data-safety) fix, not just an ergonomics one. Pin ^1.0.1 in composer.json so CI and prod don't resolve 1.0.0.queue:forget / queue:retry commands, so the first place to look is config/queue.php → failed.driver. Your day-to-day behavior differs materially between database (integer id) and database-uuids (string uuid).failed_jobs table (via php artisan queue:failed or a tinker query) and call retry($idOrUuid) / forget($idOrUuid) from tinker. Confirm which column your driver uses before passing anything in.retry() and forget() ultimately shell out to queue:retry / queue:forget, and nearly every historical bug in this package was an identifier-shape mismatch, not a queue problem.Retry from an admin UI or internal tool. Pass the identifier straight from the failed_jobs row you rendered. In 1.0.1+ UUIDs are passed through unchanged, so you no longer need to translate uuid → id yourself before calling retry().
Forget after retry. A common pattern is a "retry and clear" action: retry($row->uuid); forget($row->uuid);. This is now safe under database-uuids, which previously threw on MySQL and no-op'd silently elsewhere.
Driver-aware helper. If your app supports both drivers (e.g. local database, prod database-uuids), resolve the identifier once and branch on the driver rather than guessing:
$key = config('queue.failed.driver') === 'database-uuids'
? $job->uuid
: $job->id;
Bulk cleanup. Chunk over the failed_jobs table and call forget() per row rather than deleting rows directly — going through the package keeps any listener/event behavior and command output intact.
Artisan wrapper. Expose a small queue:purge-failed --before=... command in your app that delegates to the package; this is the natural seam for adding authorization, audit logging, and "dry run" output before anything is destroyed.
Queue-scoped operations. When retrying a batch, filter by queue and connection columns first and retry in a loop; the package operates on single identifiers, so fan-out is your responsibility.
database-uuids. In 1.0.0, forget() passed the integer id where a UUID was expected. On MySQL that could resolve a different failed job — i.e. delete the wrong record. On other databases it silently deleted nothing. Treat 1.0.0 as unsafe for any forget() path that derived an id from a UUID-keyed row.forget() on a non-matching identifier often just deletes nothing. Always assert on the return value / command output in tests; a green test that only checks "no exception thrown" proves nothing here.php artisan queue:failed. If the value isn't in that list, the bug is upstream in your row mapping.database-uuids variant to your feature tests, ideally against MySQL in CI.How can I help you explore Laravel packages today?