DatabaseFailedJobProvider.php
TLDR
The DatabaseFailedJobProvider.php
file is a part of the Illuminate Queue/Failed namespace and provides functionality for handling failed jobs that are stored in a database. It includes methods for logging failed jobs, retrieving job IDs, retrieving all failed jobs, finding a single failed job, deleting a single failed job, flushing all failed jobs, pruning old failed jobs, and counting the number of failed jobs.
Methods
log
This method is used to log a failed job into storage. It takes the connection name, queue name, payload, and the exception that caused the job to fail as parameters and returns the ID of the inserted record in the storage.
ids
This method is used to get the IDs of all failed jobs. It takes an optional queue name as a parameter and returns an array of failed job IDs.
all
This method is used to get a list of all failed jobs. It returns an array of all failed job records.
find
This method is used to get a single failed job. It takes the ID of the failed job as a parameter and returns the corresponding job record or null
if the job is not found.
forget
This method is used to delete a single failed job from storage. It takes the ID of the failed job as a parameter and returns true
if the job is successfully deleted or false
otherwise.
flush
This method is used to delete all of the failed jobs from storage. It takes the number of hours as an optional parameter. If a number of hours is provided, all failed jobs older than the specified number of hours will be deleted.
prune
This method is used to prune failed jobs older than a given date. It takes a DateTimeInterface
object representing the date as a parameter and returns the total number of deleted records.
count
This method is used to count the number of failed jobs. It takes the connection name and queue name as optional parameters and returns the count of failed jobs based on the provided parameters.
Classes
No classes are defined in the file.
<?php
namespace Illuminate\Queue\Failed;
use DateTimeInterface;
use Illuminate\Database\ConnectionResolverInterface;
use Illuminate\Support\Facades\Date;
class DatabaseFailedJobProvider implements CountableFailedJobProvider, FailedJobProviderInterface, PrunableFailedJobProvider
{
/**
* The connection resolver implementation.
*
* @var \Illuminate\Database\ConnectionResolverInterface
*/
protected $resolver;
/**
* The database connection name.
*
* @var string
*/
protected $database;
/**
* The database table.
*
* @var string
*/
protected $table;
/**
* Create a new database failed job provider.
*
* @param \Illuminate\Database\ConnectionResolverInterface $resolver
* @param string $database
* @param string $table
* @return void
*/
public function __construct(ConnectionResolverInterface $resolver, $database, $table)
{
$this->table = $table;
$this->resolver = $resolver;
$this->database = $database;
}
/**
* Log a failed job into storage.
*
* @param string $connection
* @param string $queue
* @param string $payload
* @param \Throwable $exception
* @return int|null
*/
public function log($connection, $queue, $payload, $exception)
{
$failed_at = Date::now();
$exception = (string) mb_convert_encoding($exception, 'UTF-8');
return $this->getTable()->insertGetId(compact(
'connection', 'queue', 'payload', 'exception', 'failed_at'
));
}
/**
* Get the IDs of all of the failed jobs.
*
* @param string|null $queue
* @return array
*/
public function ids($queue = null)
{
return $this->getTable()
->when(! is_null($queue), fn ($query) => $query->where('queue', $queue))
->orderBy('id', 'desc')
->pluck('id')
->all();
}
/**
* Get a list of all of the failed jobs.
*
* @return array
*/
public function all()
{
return $this->getTable()->orderBy('id', 'desc')->get()->all();
}
/**
* Get a single failed job.
*
* @param mixed $id
* @return object|null
*/
public function find($id)
{
return $this->getTable()->find($id);
}
/**
* Delete a single failed job from storage.
*
* @param mixed $id
* @return bool
*/
public function forget($id)
{
return $this->getTable()->where('id', $id)->delete() > 0;
}
/**
* Flush all of the failed jobs from storage.
*
* @param int|null $hours
* @return void
*/
public function flush($hours = null)
{
$this->getTable()->when($hours, function ($query, $hours) {
$query->where('failed_at', '<=', Date::now()->subHours($hours));
})->delete();
}
/**
* Prune all of the entries older than the given date.
*
* @param \DateTimeInterface $before
* @return int
*/
public function prune(DateTimeInterface $before)
{
$query = $this->getTable()->where('failed_at', '<', $before);
$totalDeleted = 0;
do {
$deleted = $query->take(1000)->delete();
$totalDeleted += $deleted;
} while ($deleted !== 0);
return $totalDeleted;
}
/**
* Count the failed jobs.
*
* @param string|null $connection
* @param string|null $queue
* @return int
*/
public function count($connection = null, $queue = null)
{
return $this->getTable()
->when($connection, fn ($builder) => $builder->whereConnection($connection))
->when($queue, fn ($builder) => $builder->whereQueue($queue))
->count();
}
/**
* Get a new query builder instance for the table.
*
* @return \Illuminate\Database\Query\Builder
*/
protected function getTable()
{
return $this->resolver->connection($this->database)->table($this->table);
}
}