/** * Add dependencies recursively through embedded documents. Embedded documents * may have references to other documents so those need to be saved first. * * @param ClassMetadata $class * @param CommitOrderCalculator $calc */ private function addDependencies(ClassMetadata $class, $calc) { foreach ($class->fieldMappings as $mapping) { if ($mapping['isOwningSide'] && isset($mapping['reference']) && isset($mapping['targetDocument'])) { $targetClass = $this->dm->getClassMetadata($mapping['targetDocument']); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } if (!$calc->hasDependency($targetClass, $class)) { $calc->addDependency($targetClass, $class); } } if (isset($mapping['embedded']) && isset($mapping['targetDocument'])) { $targetClass = $this->dm->getClassMetadata($mapping['targetDocument']); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } if (!$calc->hasDependency($targetClass, $class)) { $calc->addDependency($targetClass, $class); } // avoid infinite recursion if ($class != $targetClass) { $this->addDependencies($targetClass, $calc); } } } }
/** * Add dependencies recursively through embedded documents. Embedded documents * may have references to other documents so those need to be saved first. * * @param ClassMetadata $class * @param CommitOrderCalculator $calc */ private function _addDependencies($class, $calc) { foreach ($class->fieldMappings as $mapping) { if (isset($mapping['reference'])) { $targetClass = $this->_dm->getClassMetadata($mapping['targetDocument']); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } if (!$calc->hasDependency($targetClass, $class)) { $calc->addDependency($targetClass, $class); } } if (isset($mapping['embedded'])) { $targetClass = $this->_dm->getClassMetadata($mapping['targetDocument']); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } if (!$calc->hasDependency($targetClass, $class)) { $calc->addDependency($targetClass, $class); } $this->_addDependencies($targetClass, $calc); } } }