Doctrine\ODM\MongoDB\Mapping\Driver\YamlDriver::loadMetadataForClass PHP Method

loadMetadataForClass() public method

{@inheritDoc}
public loadMetadataForClass ( $className, Doctrine\Common\Persistence\Mapping\ClassMetadata $class )
$class Doctrine\Common\Persistence\Mapping\ClassMetadata
    public function loadMetadataForClass($className, ClassMetadata $class)
    {
        /* @var $class ClassMetadataInfo */
        $element = $this->getElement($className);
        if (!$element) {
            return;
        }
        $element['type'] = isset($element['type']) ? $element['type'] : 'document';
        if (isset($element['db'])) {
            $class->setDatabase($element['db']);
        }
        if (isset($element['collection'])) {
            $class->setCollection($element['collection']);
        }
        if (isset($element['writeConcern'])) {
            $class->setWriteConcern($element['writeConcern']);
        }
        if ($element['type'] == 'document') {
            if (isset($element['repositoryClass'])) {
                $class->setCustomRepositoryClass($element['repositoryClass']);
            }
        } elseif ($element['type'] === 'mappedSuperclass') {
            $class->setCustomRepositoryClass(isset($element['repositoryClass']) ? $element['repositoryClass'] : null);
            $class->isMappedSuperclass = true;
        } elseif ($element['type'] === 'embeddedDocument') {
            $class->isEmbeddedDocument = true;
        } elseif ($element['type'] === 'queryResultDocument') {
            $class->isQueryResultDocument = true;
        }
        if (isset($element['indexes'])) {
            foreach ($element['indexes'] as $index) {
                $class->addIndex($index['keys'], isset($index['options']) ? $index['options'] : array());
            }
        }
        if (isset($element['shardKey'])) {
            $this->setShardKey($class, $element['shardKey']);
        }
        if (isset($element['inheritanceType'])) {
            $class->setInheritanceType(constant(MappingClassMetadata::class . '::INHERITANCE_TYPE_' . strtoupper($element['inheritanceType'])));
        }
        if (isset($element['discriminatorField'])) {
            $class->setDiscriminatorField($this->parseDiscriminatorField($element['discriminatorField']));
        }
        if (isset($element['discriminatorMap'])) {
            $class->setDiscriminatorMap($element['discriminatorMap']);
        }
        if (isset($element['defaultDiscriminatorValue'])) {
            $class->setDefaultDiscriminatorValue($element['defaultDiscriminatorValue']);
        }
        if (isset($element['changeTrackingPolicy'])) {
            $class->setChangeTrackingPolicy(constant(MappingClassMetadata::class . '::CHANGETRACKING_' . strtoupper($element['changeTrackingPolicy'])));
        }
        if (isset($element['requireIndexes'])) {
            $class->setRequireIndexes($element['requireIndexes']);
        }
        if (isset($element['slaveOkay'])) {
            $class->setSlaveOkay($element['slaveOkay']);
        }
        if (isset($element['fields'])) {
            foreach ($element['fields'] as $fieldName => $mapping) {
                if (is_string($mapping)) {
                    $type = $mapping;
                    $mapping = array();
                    $mapping['type'] = $type;
                }
                if (!isset($mapping['fieldName'])) {
                    $mapping['fieldName'] = $fieldName;
                }
                if (isset($mapping['type']) && !empty($mapping['embedded'])) {
                    $this->addMappingFromEmbed($class, $fieldName, $mapping, $mapping['type']);
                } elseif (isset($mapping['type']) && !empty($mapping['reference'])) {
                    $this->addMappingFromReference($class, $fieldName, $mapping, $mapping['type']);
                } else {
                    $this->addFieldMapping($class, $mapping);
                }
            }
        }
        if (isset($element['embedOne'])) {
            foreach ($element['embedOne'] as $fieldName => $embed) {
                $this->addMappingFromEmbed($class, $fieldName, $embed, 'one');
            }
        }
        if (isset($element['embedMany'])) {
            foreach ($element['embedMany'] as $fieldName => $embed) {
                $this->addMappingFromEmbed($class, $fieldName, $embed, 'many');
            }
        }
        if (isset($element['referenceOne'])) {
            foreach ($element['referenceOne'] as $fieldName => $reference) {
                $this->addMappingFromReference($class, $fieldName, $reference, 'one');
            }
        }
        if (isset($element['referenceMany'])) {
            foreach ($element['referenceMany'] as $fieldName => $reference) {
                $this->addMappingFromReference($class, $fieldName, $reference, 'many');
            }
        }
        if (isset($element['lifecycleCallbacks'])) {
            foreach ($element['lifecycleCallbacks'] as $type => $methods) {
                foreach ($methods as $method) {
                    $class->addLifecycleCallback($method, constant('Doctrine\\ODM\\MongoDB\\Events::' . $type));
                }
            }
        }
        if (isset($element['alsoLoadMethods'])) {
            foreach ($element['alsoLoadMethods'] as $methodName => $fieldName) {
                $class->registerAlsoLoadMethod($methodName, $fieldName);
            }
        }
    }

Usage Example

 public function testCreateYmlDriver()
 {
     $xmlDriver = new YamlDriver(__DIR__ . '/fixtures/yaml');
     $classMetadata = new ClassMetadata('TestDocuments\\User');
     $xmlDriver->loadMetadataForClass('TestDocuments\\User', $classMetadata);
     $this->assertEquals(array('fieldName' => 'id', 'id' => true, 'name' => 'id', 'type' => 'string', 'isCascadeDetach' => '', 'isCascadeMerge' => '', 'isCascadePersist' => '', 'isCascadeRefresh' => '', 'isCascadeRemove' => ''), $classMetadata->fieldMappings['id']);
     $this->assertEquals(array('fieldName' => 'username', 'name' => 'username', 'type' => 'string', 'isCascadeDetach' => '', 'isCascadeMerge' => '', 'isCascadePersist' => '', 'isCascadeRefresh' => '', 'isCascadeRemove' => ''), $classMetadata->fieldMappings['username']);
     $this->assertEquals(array('fieldName' => 'createdAt', 'name' => 'createdAt', 'type' => 'date', 'isCascadeDetach' => '', 'isCascadeMerge' => '', 'isCascadePersist' => '', 'isCascadeRefresh' => '', 'isCascadeRemove' => ''), $classMetadata->fieldMappings['createdAt']);
     $this->assertEquals(array('fieldName' => 'address', 'name' => 'address', 'type' => 'one', 'embedded' => true, 'targetDocument' => 'Documents\\Address', 'isCascadeDetach' => '', 'isCascadeMerge' => '', 'isCascadePersist' => '', 'isCascadeRefresh' => '', 'isCascadeRemove' => ''), $classMetadata->fieldMappings['address']);
     $this->assertEquals(array('fieldName' => 'phonenumbers', 'name' => 'phonenumbers', 'type' => 'many', 'embedded' => true, 'targetDocument' => 'Documents\\Phonenumber', 'isCascadeDetach' => '', 'isCascadeMerge' => '', 'isCascadePersist' => '', 'isCascadeRefresh' => '', 'isCascadeRemove' => ''), $classMetadata->fieldMappings['phonenumbers']);
     $this->assertEquals(array('cascade' => 'all', 'fieldName' => 'profile', 'name' => 'profile', 'type' => 'one', 'reference' => true, 'targetDocument' => 'Documents\\Profile', 'isCascadeDetach' => true, 'isCascadeMerge' => true, 'isCascadePersist' => true, 'isCascadeRefresh' => true, 'isCascadeRemove' => true), $classMetadata->fieldMappings['profile']);
     $this->assertEquals(array('cascade' => 'all', 'fieldName' => 'account', 'name' => 'account', 'type' => 'one', 'reference' => true, 'targetDocument' => 'Documents\\Account', 'isCascadeDetach' => true, 'isCascadeMerge' => true, 'isCascadePersist' => true, 'isCascadeRefresh' => true, 'isCascadeRemove' => true), $classMetadata->fieldMappings['account']);
     $this->assertEquals(array('cascade' => 'all', 'fieldName' => 'groups', 'name' => 'groups', 'type' => 'many', 'reference' => true, 'targetDocument' => 'Documents\\Group', 'isCascadeDetach' => true, 'isCascadeMerge' => true, 'isCascadePersist' => true, 'isCascadeRefresh' => true, 'isCascadeRemove' => true), $classMetadata->fieldMappings['groups']);
 }
All Usage Examples Of Doctrine\ODM\MongoDB\Mapping\Driver\YamlDriver::loadMetadataForClass