/**
* Adds inherited fields to the subclass mapping.
*
* @param ClassMetadata $subClass
* @param ClassMetadata $parentClass
*/
private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass)
{
foreach ($parentClass->fieldMappings as $fieldName) {
$subClass->mapField($parentClass->mappings[$fieldName], $parentClass);
}
foreach ($parentClass->referenceMappings as $fieldName) {
$mapping = $parentClass->mappings[$fieldName];
if ($mapping['type'] == ClassMetadata::MANY_TO_ONE) {
$subClass->mapManyToOne($mapping, $parentClass);
} else {
$subClass->mapManyToMany($mapping, $parentClass);
}
}
foreach ($parentClass->childMappings as $fieldName) {
$mapping = $parentClass->mappings[$fieldName];
$subClass->mapChild($mapping, $parentClass);
}
foreach ($parentClass->childrenMappings as $fieldName) {
$subClass->mapChildren($parentClass->mappings[$fieldName], $parentClass);
}
foreach ($parentClass->referrersMappings as $fieldName) {
$subClass->mapReferrers($parentClass->mappings[$fieldName], $parentClass);
}
if ($parentClass->identifier) {
$subClass->mapId($parentClass->mappings[$parentClass->identifier], $parentClass);
}
if ($parentClass->node) {
$subClass->mapNode($parentClass->mappings[$parentClass->node], $parentClass);
}
if ($parentClass->nodename) {
$subClass->mapNodename($parentClass->mappings[$parentClass->nodename], $parentClass);
}
if ($parentClass->parentMapping) {
$subClass->mapParentDocument($parentClass->mappings[$parentClass->parentMapping], $parentClass);
}
if ($parentClass->localeMapping) {
$subClass->mapLocale($parentClass->mappings[$parentClass->localeMapping], $parentClass);
}
if ($parentClass->versionNameField) {
$subClass->mapVersionName($parentClass->mappings[$parentClass->versionNameField], $parentClass);
}
if ($parentClass->versionCreatedField) {
$subClass->mapVersionCreated($parentClass->mappings[$parentClass->versionCreatedField], $parentClass);
}
if ($parentClass->lifecycleCallbacks) {
$subClass->mapLifecycleCallbacks($parentClass->lifecycleCallbacks);
}
$subClass->setReferenceable($parentClass->referenceable);
// Versionable defaults to false - only set on child class if it is non-false
if ($parentClass->versionable) {
$subClass->setVersioned($parentClass->versionable);
}
$subClass->setTranslator($parentClass->translator);
$subClass->setNodeType($parentClass->nodeType);
$subClass->setCustomRepositoryClassName($parentClass->customRepositoryClassName);
}