Project::query(), self::TASK => Task::query(), self::REQUIREMENT => Requirement::query(), self::CONTAINER, self::CONTAINER_FILE => Container::query(), }; } public function flowType(): ApprovalFlowType { return match ($this) { self::PROJECT => ApprovalFlowType::PROJECT, self::TASK => ApprovalFlowType::TASK, self::REQUIREMENT => ApprovalFlowType::REQUIREMENT, self::CONTAINER => ApprovalFlowType::CONTAINER, self::CONTAINER_FILE => ApprovalFlowType::CONTAINER_FILE, }; } public function actionObjectType(): ActionObjectType { return match ($this) { self::PROJECT => ActionObjectType::PROJECT, self::TASK => ActionObjectType::TASK, self::REQUIREMENT => ActionObjectType::REQUIREMENT, self::CONTAINER => ActionObjectType::CONTAINER, self::CONTAINER_FILE => ActionObjectType::CONTAINER_FILE, }; } public function modelBuilderAllowed(string $id = null): \Illuminate\Database\Eloquent\Builder { return match ($this) { self::PROJECT => Project::query()->allowed($id), self::TASK => Task::query()->allowed($id), self::REQUIREMENT => Requirement::query(), self::CONTAINER, self::CONTAINER_FILE => Container::query()->allowed($id), }; } public function nameField(): string { return match ($this) { self::REQUIREMENT => "title", default => "name", }; } }