where('task_id', $taskId) ->orderBy('order_index', 'ASC') ->findAll(); } /** * Получить следующий порядковый номер для подзадачи */ public function getNextOrder(int $taskId): int { $max = $this->selectMax('order_index') ->where('task_id', $taskId) ->first(); return ($max['order_index'] ?? 0) + 1; } /** * Переключить статус подзадачи */ public function toggle(int $subtaskId): bool { $subtask = $this->find($subtaskId); if (!$subtask) { return false; } return $this->update($subtaskId, [ 'is_completed' => !$subtask['is_completed'], ]); } /** * Получить количество незавершённых подзадач */ public function getIncompleteCount(int $taskId): int { return $this->where('task_id', $taskId) ->where('is_completed', false) ->countAllResults(); } }