/** * {@inheritdoc} */ public function loadMetadataForClass($className, ClassMetadata $class) { $element = $this->getElement($className); if (!$element) { return; } $element['type'] = isset($element['type']) ? $element['type'] : 'document'; if (isset($element['db'])) { $class->setDB($element['db']); } if (isset($element['collection'])) { $class->setCollection($element['collection']); } if ($element['type'] == 'document') { if (isset($element['repositoryClass'])) { $class->setCustomRepositoryClass($element['repositoryClass']); } } elseif ($element['type'] === 'mappedSuperclass') { $class->isMappedSuperclass = true; } elseif ($element['type'] === 'embeddedDocument') { $class->isEmbeddedDocument = true; } if (isset($element['indexes'])) { foreach ($element['indexes'] as $index) { $class->addIndex($index['keys'], $index['options']); } } if (isset($element['inheritanceType'])) { $class->setInheritanceType(constant('Doctrine\\ODM\\MongoDB\\Mapping\\ClassMetadata::INHERITANCE_TYPE_' . strtoupper($element['inheritanceType']))); } if (isset($element['discriminatorColumn'])) { $discrColumn = $element['discriminatorColumn']; $class->setDiscriminatorColumn(array('name' => $discrColumn['name'], 'fieldName' => $discrColumn['fieldName'])); } if (isset($element['discriminatorMap'])) { $class->setDiscriminatorMap($element['discriminatorMap']); } if (isset($element['fields'])) { foreach ($element['fields'] as $fieldName => $mapping) { if (!isset($mapping['fieldName'])) { $mapping['fieldName'] = $fieldName; } $class->mapField($mapping); } } if (isset($element['embedOne'])) { foreach ($element['embedOne'] as $fieldName => $embed) { $mapping = $this->_getMappingFromEmbed($fieldName, $embed, 'one'); $class->mapField($mapping); } } if (isset($element['embedMany'])) { foreach ($element['embedMany'] as $fieldName => $embed) { $mapping = $this->_getMappingFromEmbed($fieldName, $embed, 'many'); $class->mapField($mapping); } } if (isset($element['referenceOne'])) { foreach ($element['referenceOne'] as $fieldName => $reference) { $mapping = $this->_getMappingFromReference($fieldName, $reference, 'one'); $class->mapField($mapping); } } if (isset($element['referenceMany'])) { foreach ($element['referenceMany'] as $fieldName => $reference) { $mapping = $this->_getMappingFromReference($fieldName, $reference, 'many'); $class->mapField($mapping); } } if (isset($element['lifecycleCallbacks'])) { foreach ($element['lifecycleCallbacks'] as $type => $methods) { foreach ($methods as $method) { $class->addLifecycleCallback($method, constant('Doctrine\\ORM\\Events::' . $type)); } } } }