where('status', TicketStatus::production()) ->orWhere('status', TicketStatus::processed()); })->whereDate('updated_at', '<=', Carbon::now()->subDays($limitDays)) ->whereDoesntHave('messages', function ($q) use ($limitDays) { $q->whereDate('updated_at', '>', Carbon::now()->subDays($limitDays)); })->get(); /** @var \App\Models\Ticket $ticket */ foreach ($tickets as $ticket) { /** @var \App\Enums\TicketStatus */ $oldStatus = $ticket->status; $ticket->status = TicketStatus::archived(); $ticket->saveQuietly(); event(new TicketStatusChanged($ticket, $oldStatus, null, $message)); event(new NotifySubscriptions($ticket, $message, collect([$ticket->user]))); } } }