Need help with laravel-job-status?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

311 Stars 47 Forks MIT License 129 Commits 13 Opened issues


Add ability to track Job progress, status and result dispatched to Queue.

Services available


Need anything else?

Contributors list

Laravel Job Status

Latest Stable Version Total Downloads Build Status License

Laravel package to add ability to track

progress, status and result dispatched to
  • Queue name, attempts, status and created/updated/started/finished timestamp.
  • Progress update, with arbitrary current/max value and percentage auto calculated
  • Handles failed job with exception message
  • Custom input/output
  • Native Eloquent model
  • Support all drivers included in Laravel (null/sync/database/beanstalkd/redis/sqs)

  • This package intentionally do not provide any UI for displaying Job progress.

If you have such need, please refer to laravel-job-status-progress-view

or make your own implementation using



  • PHP >= 7.1
  • Laravel/Lumen >= 5.5


Installation for Laravel

Installation for Lumen


In your

, use
trait and call
in constructor.
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Imtigger\LaravelJobStatus\Trackable;

class TrackableJob implements ShouldQueue { use InteractsWithQueue, Queueable, SerializesModels, Trackable;

public function __construct(array $params)
    $this->params = $params; // Optional
    $this->setInput($this->params); // Optional

 * Execute the job.
 * @return void
public function handle()
    $max = mt_rand(5, 30);

    for ($i = 0; $i <= $max; $i += 1) {
        sleep(1); // Some Long Operations

    $this->setOutput(['total' => $max, 'other' => 'parameter']);


In your Job dispatcher, call

to get
function go() {
    $job = new TrackableJob([]);

    $jobStatusId = $job->getJobStatusId();


can be used elsewhere to retrieve job status, progress and output.


Call to undefined method ...->getJobStatusId()

Laravel provide many ways to dispatch Jobs. Not all methods return your Job object, for example:


If you really need to dispatch job in this way, workarounds needed: Create your own key

  1. Create migration adding extra key to job_statuses table.

  2. In your job, generate your own unique key and pass into

    $this->prepareStatus(['key' => $params['key']]);
  3. Find JobStatus another way:

    $jobStatus = JobStatus::whereKey($key)->firstOrFail();

Status not updating until transaction commited

On version >= 1.1, dedicated database connection support is added.

Therefore JobStatus updates can be saved instantly even within your application transaction.

Read setup step 6 for instructions.


prepareStatus();                           // Must be called in constructor before any other methods
$this->setProgressMax(int $v);                    // Update the max number of progress
$this->setProgressNow(int $v);                    // Update the current number progress
$this->setProgressNow(int $v, int $every);        // Update the current number progress, write to database only when $v % $every == 0
$this->incrementProgress(int $offset)             // Increase current number progress by $offset
$this->incrementProgress(int $offset, int $every) // Increase current number progress by $offset, write to database only when $v % $every == 0
$this->setInput(array $v);                        // Store input into database
$this->setOutput(array $v);                       // Store output into database (Typically the run result)

// Job public methods (Call from your Job dispatcher) $job->getJobStatusId(); // Return the primary key of JobStatus (To retrieve status later)

// JobStatus object fields var_dump($jobStatus->job_id); // String (Result varies with driver, see note) var_dump($jobStatus->type); // String var_dump($jobStatus->queue); // String var_dump($jobStatus->status); // String [queued|executing|finished|retrying|failed] var_dump($jobStatus->attempts); // Integer var_dump($jobStatus->progress_now); // Integer var_dump($jobStatus->progress_max); // Integer var_dump($jobStatus->input); // Array var_dump($jobStatus->output); // Array, ['message' => $exception->getMessage()] if job failed var_dump($jobStatus->created_at); // Carbon object var_dump($jobStatus->updated_at); // Carbon object var_dump($jobStatus->started_at); // Carbon object var_dump($jobStatus->finished_at); // Carbon object

// JobStatus generated fields var_dump($jobStatus->progress_percentage); // Double [0-100], useful for displaying progress bar var_dump($jobStatus->is_ended); // Boolean, true if status == finished || status == failed var_dump($jobStatus->is_executing); // Boolean, true if status == executing var_dump($jobStatus->is_failed); // Boolean, true if status == failed var_dump($jobStatus->is_finished); // Boolean, true if status == finished var_dump($jobStatus->is_queued); // Boolean, true if status == queued var_dump($jobStatus->is_retrying); // Boolean, true if status == retrying


result varys with driver

| Driver | job_id | ---------- | -------- | null | NULL (Job not run at all!) | sync | empty string | database | integer | beanstalkd | integer | redis | string(32) | sqs | GUID

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.