РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1383 of 1392 menu

Метод cancel

Метод cancel используется для отмены выполнения пакетной задачи в очереди Laravel. Он применяется к экземпляру класса Batch и позволяет остановить обработку всех заданий в пакете, которые ещё не были выполнены. Метод не принимает параметров и возвращает void.

Синтаксис

<?php $batch->cancel(); ?>

Пример

Давайте создадим пакет заданий и отменим его выполнение:

<?php namespace App\Http\Controllers; use App\Jobs\ProcessDataJob; use App\Jobs\SendNotificationJob; use App\Jobs\UpdateDatabaseJob; use Illuminate\Support\Facades\Bus; use Illuminate\Bus\Batch; use Illuminate\Support\Facades\Log; class BatchController extends Controller { public function createBatch() { $batch = Bus::batch([ new ProcessDataJob(), new SendNotificationJob(), new UpdateDatabaseJob(), ])->then(function (Batch $batch) { Log::info('All jobs completed'); })->catch(function (Batch $batch, $e) { Log::error('Batch failed: ' . $e->getMessage()); })->finally(function (Batch $batch) { Log::info('Batch finished'); })->dispatch(); return $batch->id; } } ?>

Пример

Отменим пакетную задачу по её ID:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Bus; use Illuminate\Bus\Batch; use Illuminate\Http\Request; class BatchController extends Controller { public function cancelBatch(Request $request) { $batchId = $request->input('batch_id'); $batch = Bus::findBatch($batchId); if ($batch) { $batch->cancel(); return response()->json([ 'message' => 'Batch cancelled successfully' ]); } return response()->json([ 'message' => 'Batch not found' ], 404); } } ?>

Пример

Проверим статус пакета до и после отмены:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Bus; use Illuminate\Bus\Batch; use Illuminate\Support\Facades\Log; class BatchController extends Controller { public function checkBatchStatus($batchId) { $batch = Bus::findBatch($batchId); if (!$batch) { return 'Batch not found'; } $res = [ 'id' => $batch->id, 'pending' => $batch->pending(), 'processed' => $batch->processed(), 'progress' => $batch->progress(), 'canceled' => $batch->canceled() ]; if ($batch->pending() && !$batch->canceled()) { $batch->cancel(); $res['status'] = 'Cancelled'; } return $res; } } ?>

Пример

Отменим пакет с проверкой на возможность отмены:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Bus; use Illuminate\Bus\Batch; use Illuminate\Support\Facades\Log; class BatchController extends Controller { public function safeCancelBatch($batchId) { $batch = Bus::findBatch($batchId); if (!$batch) { return 'Batch not found'; } if ($batch->processed()) { Log::warning('Batch already processed, cannot cancel'); return 'Batch already processed'; } if ($batch->canceled()) { Log::info('Batch already canceled'); return 'Batch already canceled'; } $batch->cancel(); Log::info('Batch canceled successfully'); return 'Batch canceled'; } } ?>

Смотрите также

  • метод then,
    который выполняет код после успешного завершения пакета
  • метод catch,
    который обрабатывает ошибки в пакете
  • метод finally,
    который выполняется после завершения пакета
  • метод progress,
    который возвращает прогресс выполнения пакета
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить