/** * Adds inherited fields to the subclass mapping. * * @param ClassMetadata $subClass * @param ClassMetadata $parentClass * @return void */ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) { $inheritedFields = $parentClass->getInheritedFields(); foreach ($inheritedFields as $fieldName => $className) { $subClass->setFieldInherited($fieldName, $className); } $delcaredFields = $parentClass->getDeclaredFields(); foreach ($delcaredFields as $fieldName => $className) { $subClass->setFieldDeclared($fieldName, $className); } foreach ($parentClass->fieldMappings as $fieldName => $mapping) { $this->registerParentOnField($subClass, $parentClass, $fieldName); $subClass->mapField($mapping); } foreach ($parentClass->associationsMappings as $fieldName => $mapping) { $this->registerParentOnField($subClass, $parentClass, $fieldName); if ($mapping['type'] == ClassMetadata::MANY_TO_ONE) { $subClass->mapManyToOne($mapping); } else { $subClass->mapManyToMany($mapping); } } foreach ($parentClass->childMappings as $fieldName => $mapping) { $this->registerParentOnField($subClass, $parentClass, $fieldName); $subClass->mapChild($mapping); } foreach ($parentClass->childrenMappings as $fieldName => $mapping) { $this->registerParentOnField($subClass, $parentClass, $fieldName); $subClass->mapChildren($mapping); } foreach ($parentClass->referrersMappings as $fieldName => $mapping) { $this->registerParentOnField($subClass, $parentClass, $fieldName); $subClass->mapReferrers($mapping); } if ($parentClass->identifier) { $this->registerParentOnField($subClass, $parentClass, $parentClass->identifier); $subClass->mapId(array('fieldName' => $parentClass->identifier, 'id' => true, 'strategy' => $parentClass->idGenerator)); } if ($parentClass->node) { $this->registerParentOnField($subClass, $parentClass, $parentClass->node); $subClass->mapNode(array('fieldName' => $parentClass->node)); } if ($parentClass->nodename) { $this->registerParentOnField($subClass, $parentClass, $parentClass->nodename); $subClass->mapNodename(array('fieldName' => $parentClass->nodename)); } if ($parentClass->parentMapping) { $this->registerParentOnField($subClass, $parentClass, $parentClass->parentMapping); $subClass->mapParentDocument(array('fieldName' => $parentClass->parentMapping)); } if ($parentClass->localeMapping) { $this->registerParentOnField($subClass, $parentClass, $parentClass->localeMapping); $subClass->mapLocale(array('fieldName' => $parentClass->localeMapping)); } if ($parentClass->versionNameField) { $this->registerParentOnField($subClass, $parentClass, $parentClass->versionNameField); $subClass->mapVersionName(array('fieldName' => $parentClass->versionNameField)); } if ($parentClass->versionCreatedField) { $this->registerParentOnField($subClass, $parentClass, $parentClass->versionCreatedField); $subClass->mapVersionCreated(array('fieldName' => $parentClass->versionCreatedField)); } if ($parentClass->lifecycleCallbacks) { $subClass->mapLifecycleCallbacks($parentClass->lifecycleCallbacks); } }