{"record":{"id":"ffac3497734e2ab2","repo":"doctrine/orm","slug":"unknown-property-key-on-class-class-ffac34","errorCode":null,"errorMessage":"Unknown property {key} on class {class}","messagePattern":"Unknown property (.+?) on class (.+?)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/Mapping/DiscriminatorColumnMapping.php","lineNumber":63,"sourceCode":"     *     options?: array<string, mixed>|null,\n     * } $mappingArray\n     */\n    public static function fromMappingArray(array $mappingArray): self\n    {\n        $mapping = new self(\n            $mappingArray['type'],\n            $mappingArray['fieldName'],\n            $mappingArray['name'],\n        );\n        foreach ($mappingArray as $key => $value) {\n            if (in_array($key, ['type', 'fieldName', 'name'])) {\n                continue;\n            }\n\n            if (property_exists($mapping, $key)) {\n                $mapping->$key = $value ?? $mapping->$key;\n            } else {\n                throw new Exception('Unknown property ' . $key . ' on class ' . static::class);\n            }\n        }\n\n        return $mapping;\n    }\n\n    /** @return list<string> */\n    public function __sleep(): array\n    {\n        $serialized = ['type', 'fieldName', 'name'];\n\n        foreach (['length', 'columnDefinition', 'enumType', 'options'] as $stringOrArrayKey) {\n            if ($this->$stringOrArrayKey !== null) {\n                $serialized[] = $stringOrArrayKey;\n            }\n        }\n\n        return $serialized;","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/doctrine/orm/blob/d9b9ff73016bf598ae07515f97289ce8074e97a5/src/Mapping/DiscriminatorColumnMapping.php#L45-L81","documentation":"Doctrine ORM builds its DiscriminatorColumnMapping value object from a plain mapping array via DiscriminatorColumnMapping::fromMappingArray(), which is what the XML/YAML/PHP mapping drivers and cached metadata feed. After the required 'type', 'fieldName' and 'name' keys are consumed, every remaining key is assigned onto the mapping object using property_exists(); a key that matches no public property of DiscriminatorColumnMapping throws this exception, naming the offending key and class.","triggerScenarios":"Calling DiscriminatorColumnMapping::fromMappingArray() (directly or via a mapping driver / metadata factory) with an array containing a key other than type, fieldName, name, length, columnDefinition, enumType, options. Typical offenders: a misspelled key like 'lenght', or a key valid on regular column mappings (precision, scale, unique, nullable) that DiscriminatorColumnMapping does not define.","commonSituations":"Hand-written XML or YAML <discriminator-column> definitions with misspelled/unsupported attributes; PHP array mappings copied from a #[Column] definition; metadata cached by an older ORM version with different key names; custom mapping drivers that pass extra keys through.","solutions":["Fix or remove the offending key: only type, fieldName, name, length, columnDefinition, enumType and options are accepted on discriminator-column mappings.","If the key belongs to a regular field (precision, scale, ...), move it to the <field>/<column> mapping, not the discriminator column.","Clear cached metadata (doctrine orm:clear-cache:metadata) so a stale mapping array from an older ORM version is regenerated."],"exampleFix":"// before\nDiscriminatorColumnMapping::fromMappingArray([\n    'type'      => 'string',\n    'fieldName' => 'dtype',\n    'name'      => 'discr',\n    'lenght'    => 255, // typo: unknown property\n]);\n\n// after\nDiscriminatorColumnMapping::fromMappingArray([\n    'type'      => 'string',\n    'fieldName' => 'dtype',\n    'name'      => 'discr',\n    'length'    => 255,\n]);","handlingStrategy":"validation","validationCode":"$allowed = ['type', 'fieldName', 'name', 'length', 'columnDefinition', 'enumType', 'options'];\n$unknown = array_diff(array_keys($mappingArray), $allowed);\nif ($unknown !== []) {\n    throw new InvalidArgumentException('Unsupported discriminator-column keys: ' . implode(', ', $unknown));\n}\nreturn DiscriminatorColumnMapping::fromMappingArray($mappingArray);","typeGuard":null,"tryCatchPattern":"try { DiscriminatorColumnMapping::fromMappingArray($array); } catch (Exception $e) { throw new MappingConfigurationException('Invalid <discriminator-column> mapping: ' . $e->getMessage(), 0, $e); }","preventionTips":["Keep mapping arrays in one place so key typos surface immediately.","Run metadata loading in CI (instantiate the EntityManager / warm the cache) to catch bad mappings before deploy.","Regenerate cached metadata after ORM upgrades."],"tags":["doctrine-orm","mapping","discriminator-column","inheritance","configuration"],"backgroundTag":"invalid-mapping-configuration","analyzedSha":"d9b9ff73016bf598ae07515f97289ce8074e97a5","analyzedAt":"2026-08-21T06:13:15.863Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}