Метод allowFailures
Метод allowFailures класса Batch определяет поведение пакета заданий при возникновении ошибок. По умолчанию, если какое-либо задание в пакете завершается с ошибкой, выполнение всего пакета останавливается. При вызове allowFailures пакет продолжит выполнение оставшихся заданий, даже если некоторые из них потерпят неудачу. Метод не принимает параметров и возвращает текущий экземпляр пакета для цепочки вызовов.
Синтаксис
<?php
Bus::batch([
// Jobs
])->allowFailures()->dispatch();
?>
Пример
Давайте создадим пакет из трёх заданий, который продолжит выполнение даже при возникновении ошибок:
<?php
namespace App\Http\Controllers;
use App\Jobs\ProcessDataJob;
use App\Jobs\SendEmailJob;
use App\Jobs\GenerateReportJob;
use Illuminate\Support\Facades\Bus;
class BatchController extends Controller
{
public function createBatch()
{
$batch = Bus::batch([
new ProcessDataJob(1),
new SendEmailJob('user@example.com'),
new GenerateReportJob(2024),
])->allowFailures()->dispatch();
echo $batch->id;
}
}
?>
Результат выполнения кода:
"batch-1234567890"
Пример
Рассмотрим пакет, в котором некоторые задания могут завершиться с ошибкой:
<?php
namespace App\Http\Controllers;
use App\Jobs\ImportUsersJob;
use App\Jobs\ImportProductsJob;
use App\Jobs\ImportOrdersJob;
use Illuminate\Support\Facades\Bus;
use Illuminate\Support\Facades\Log;
class BatchController extends Controller
{
public function importBatch()
{
$batch = Bus::batch([
new ImportUsersJob('users.csv'),
new ImportProductsJob('products.csv'),
new ImportOrdersJob('orders.csv'),
])->allowFailures()
->then(function ($res) {
Log::info('Batch completed with failures: ' . $res->failedJobs);
})
->catch(function ($exception) {
Log::error('Batch failed completely: ' . $exception->getMessage());
})
->dispatch();
echo $batch->id;
}
}
?>
Результат выполнения кода:
"batch-9876543210"
Пример
Используем allowFailures с дополнительными методами для отслеживания прогресса пакета:
<?php
namespace App\Http\Controllers;
use App\Jobs\OptimizeCacheJob;
use App\Jobs\ClearLogsJob;
use App\Jobs\ReindexSearchJob;
use Illuminate\Support\Facades\Bus;
class BatchController extends Controller
{
public function maintenanceBatch()
{
$batch = Bus::batch([
new OptimizeCacheJob(),
new ClearLogsJob(),
new ReindexSearchJob(),
])->allowFailures()
->then(function ($res) {
echo "Batch processed with failures: " . $res->failedJobs;
})
->progress(function ($res) {
echo "Progress: " . $res->progress() . "%";
})
->dispatch();
return $batch->id;
}
}
?>
Результат выполнения кода:
"batch-5678901234"