{"record":{"id":"59cd92812b456e3f","repo":"cakephp/cakephp","slug":"unknown-deferrable-passed","errorCode":null,"errorMessage":"Unknown deferrable passed: ","messagePattern":"Unknown deferrable passed: ","errorType":"validation","errorClass":"InvalidArgumentException","httpStatus":null,"severity":"error","filePath":"src/Database/Schema/ForeignKey.php","lineNumber":265,"sourceCode":"     * @throws \\InvalidArgumentException\n     * @return string\n     */\n    protected function normalizeDeferrable(string $deferrable): string\n    {\n        $mapping = [\n            'DEFERRED' => ForeignKey::DEFERRED,\n            'IMMEDIATE' => ForeignKey::IMMEDIATE,\n            'NOT DEFERRED' => ForeignKey::NOT_DEFERRED,\n            ForeignKey::DEFERRED => ForeignKey::DEFERRED,\n            ForeignKey::IMMEDIATE => ForeignKey::IMMEDIATE,\n            ForeignKey::NOT_DEFERRED => ForeignKey::NOT_DEFERRED,\n        ];\n        $normalized = strtoupper(str_replace('_', ' ', $deferrable));\n        if (array_key_exists($normalized, $mapping)) {\n            return $mapping[$normalized];\n        }\n\n        throw new InvalidArgumentException('Unknown deferrable passed: ' . $deferrable);\n    }\n}\n","sourceCodeStart":247,"sourceCodeEnd":268,"githubUrl":"https://github.com/cakephp/cakephp/blob/1128eba9b09f1946df684811350e26f2cef68fac/src/Database/Schema/ForeignKey.php#L247-L268","documentation":"ForeignKey::normalizeDeferrable() maps human-readable deferrable mode strings (e.g. 'deferrable', 'not_deferrable', 'initially_deferred', 'initially_immediate' — case-insensitive, underscores converted to spaces) to normalized values via a mapping array. Any input whose normalized form is not a key of the mapping throws InvalidArgumentException.","triggerScenarios":"Calling setDeferrable('defered') (typo), setDeferrable('deferred') (missing the 'initially' prefix where required), or passing arbitrary strings to the constructor's deferrable option.","commonSituations":"Typos in deferrable mode names; assuming 'deferred' alone is valid when only 'initially deferred'/'initially immediate' are; copying Postgres DDL strings with formats the mapping does not recognize.","solutions":["Use one of the recognized strings: 'deferrable', 'not deferrable', 'initially deferred', 'initially immediate' (underscores also accepted)","Check the exception message to see the exact value you passed and correct it","Inspect the $mapping array in normalizeDeferrable() to see all accepted inputs"],"exampleFix":"// before\n$foreignKey->setDeferrable('deferred');\n// after\n$foreignKey->setDeferrable('initially deferred');","handlingStrategy":"validation","validationCode":"$valid = ['deferrable', 'not deferrable', 'initially deferred', 'initially immediate'];\n$norm = strtolower(str_replace('_', ' ', $deferrable));\nif (!in_array($norm, $valid, true)) {\n    throw new InvalidArgumentException('Invalid deferrable mode: ' . $deferrable);\n}\n$fk->setDeferrable($deferrable);","typeGuard":null,"tryCatchPattern":"try {\n    $fk->setDeferrable($mode);\n} catch (\\InvalidArgumentException $e) {\n    // fall back to default mode and log\n    $logger->warning('Bad deferrable mode: ' . $e->getMessage());\n}","preventionTips":["Use the exact accepted strings or underscores variant: 'initially_deferred' etc.","Avoid inventing shorthand like 'deferred' — it is not in the mapping","Validate deferrable config values at application bootstrap"],"tags":["schema","foreign-key","php"],"backgroundTag":"invalid-enum-value","analyzedSha":"1128eba9b09f1946df684811350e26f2cef68fac","analyzedAt":"2026-09-12T12:07:00.388Z","contentChangedAt":"2026-09-12T12:07:00.388Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}