oldest('id')->limit(500)->pluck('id'); foreach ($ids as $id) { try { DB::beginTransaction(); $order = Order::lockForUpdate()->findOrFail($id); $orderService->cancel($order); DB::commit(); } catch (Throwable $e) { DB::rollBack(); report($e); } } if ($ids->isEmpty()) { sleep(60); } else { sleep(10); } } } }