{"record":{"id":"38c9cc5ddae2bea2","repo":"mongodb/laravel-mongodb","slug":"unexpected-sortdirection-enum-case","errorCode":null,"errorMessage":"Unexpected SortDirection enum case.","messagePattern":"Unexpected SortDirection enum case\\.","errorType":"exception","errorClass":"InvalidArgumentException","httpStatus":null,"severity":"error","filePath":"src/Query/Builder.php","lineNumber":677,"sourceCode":"            $this->columns = [$column];\n        }\n\n        return $this;\n    }\n\n    /**\n     * @param SortDirection|int|string|array $direction\n     *\n     * @inheritdoc\n     */\n    #[Override]\n    public function orderBy($column, $direction = 'asc')\n    {\n        if ($direction instanceof SortDirection) {\n            $direction = match ($direction) {\n                SortDirection::Ascending => 1,\n                SortDirection::Descending => -1,\n                default => throw new InvalidArgumentException('Unexpected SortDirection enum case.'),\n            };\n        } elseif (is_string($direction)) {\n            $direction = match ($direction) {\n                'asc', 'ASC' => 1,\n                'desc', 'DESC' => -1,\n                default => throw new InvalidArgumentException('Order direction must be \"asc\", \"desc\" or a case from the SortDirection enum.'),\n            };\n        }\n\n        $column = (string) $column;\n        if ($column === 'natural') {\n            $this->orders['$natural'] = $direction;\n        } else {\n            $this->orders[$column] = $direction;\n        }\n\n        return $this;\n    }","sourceCodeStart":659,"sourceCodeEnd":695,"githubUrl":"https://github.com/mongodb/laravel-mongodb/blob/0634653039468ceb0268a69192bdac64469ed043/src/Query/Builder.php#L659-L695","documentation":"orderBy() maps the SortDirection enum to MongoDB sort ints (1/-1) with an exhaustive match; the default arm throws this InvalidArgumentException for any enum case outside Ascending/Descending. In normal usage this is unreachable, but custom/subclassed or future enum cases would trigger it.","triggerScenarios":"Passing a SortDirection-like enum case that is neither SortDirection::Ascending nor SortDirection::Descending to orderBy().","commonSituations":"A future SortDirection case added by a library upgrade, or confusing a different library's direction enum with this package's SortDirection.","solutions":["Only pass SortDirection::Ascending or SortDirection::Descending.","Use the string forms 'asc'/'desc' if unsure.","After package upgrades, re-check enum usage if the SortDirection class gained new cases."],"exampleFix":"// before\n$dir = SomeOtherEnum::Both;\n$query->orderBy('name', $dir);\n// after\n$query->orderBy('name', SortDirection::Descending);","handlingStrategy":"validation","validationCode":"if ($direction instanceof MongoDB\\Laravel\\Query\\SortDirection\n    && ! in_array($direction, [SortDirection::Ascending, SortDirection::Descending], true)) {\n    throw new InvalidArgumentException('Unsupported SortDirection case');\n}\n$query->orderBy($column, $direction);","typeGuard":"function isKnownSortDirection(mixed $d): bool {\n    return $d instanceof MongoDB\\Laravel\\Query\\SortDirection\n        && in_array($d, [SortDirection::Ascending, SortDirection::Descending], true);\n}","tryCatchPattern":"try {\n    $query->orderBy($column, $direction);\n} catch (InvalidArgumentException $e) {\n    if (str_contains($e->getMessage(), 'Unexpected SortDirection enum case')) {\n        $query->orderBy($column, SortDirection::Ascending);\n    } else { throw $e; }\n}","preventionTips":["Only use SortDirection::Ascending/Descending constants","Avoid casting foreign enums into orderBy()","Re-verify enum usage after package upgrades","Prefer string 'asc'/'desc' when direction comes from untrusted input"],"tags":["sort","enum","order-by"],"backgroundTag":"invalid-enum-value","analyzedSha":"0634653039468ceb0268a69192bdac64469ed043","analyzedAt":"2026-09-15T02:56:37.067Z","contentChangedAt":"2026-09-15T02:56:37.067Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}