where('notified', false) ->whereBetween('expiration', [Carbon::now(), Carbon::now()->addDay()]) ->chunkById(100, function ($invites) use (&$notified) { foreach ($invites as $invite) { Mail::to($invite->requestor_email) ->queue(new InviteExpiringSoon($invite)); $notified++; $invite->notified = true; $invite->save(); Log::debug("Notified approved invite {$invite->invitation_code}, sent to {$invite->requestor_email}."); } }); Invitation::where('expiration', '<', Carbon::now()) ->where('status', '!=', 'denied') ->chunkById(100, function ($invites) use (&$deleted, &$notified) { foreach ($invites as $invite) { Log::debug("Deleted invite {$invite->invitation_code} for {$invite->requestor_email}."); $invite->delete(); $deleted++; } }); Log::info("Deleted {$deleted} invites and notified {$notified} approved invites close to expiration."); } }