/** * {@inheritdoc} */ protected function getCommitOrder(EntityManager $em, array $classes) { $calc = new CommitOrderCalculator(); foreach ($classes as $class) { $calc->addClass($class); // $class before its parents foreach ($class->parentClasses as $parentClass) { $parentClass = $em->getClassMetadata($parentClass); if (!$calc->hasClass($parentClass->name)) { $calc->addClass($parentClass); } $calc->addDependency($class, $parentClass); } foreach ($class->associationMappings as $assoc) { if ($assoc['isOwningSide']) { $targetClass = $em->getClassMetadata($assoc['targetEntity']); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } // add dependency ($targetClass before $class) $calc->addDependency($targetClass, $class); // parents of $targetClass before $class, too foreach ($targetClass->parentClasses as $parentClass) { $parentClass = $em->getClassMetadata($parentClass); if (!$calc->hasClass($parentClass->name)) { $calc->addClass($parentClass); } $calc->addDependency($parentClass, $class); } } } } return $calc->getCommitOrder(); }
protected function getDumpOrder(array $classes) { $calc = new CommitOrderCalculator(); foreach ($classes as $class) { if (!$class->getReflectionClass()->isInstantiable() || $class->isMappedSuperclass) { continue; } if ($class->getTableName() === 'Group') { continue; } $calc->addClass($class); // $class before its parents foreach ($class->parentClasses as $parentClass) { $parentClass = $this->objectManager->getClassMetadata($parentClass); if (!$calc->hasClass($parentClass->name)) { $calc->addClass($parentClass); } $calc->addDependency($class, $parentClass); } foreach ($class->associationMappings as $assoc) { if ($assoc['isOwningSide']) { $targetClass = $this->objectManager->getClassMetadata($assoc['targetEntity']); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } // add dependency ($targetClass before $class) $calc->addDependency($targetClass, $class); // parents of $targetClass before $class, too foreach ($targetClass->parentClasses as $parentClass) { $parentClass = $this->objectManager->getClassMetadata($parentClass); if (!$calc->hasClass($parentClass->name)) { $calc->addClass($parentClass); } $calc->addDependency($parentClass, $class); } } } } return $calc->getCommitOrder(); }
protected function getCommitOrder(EntityManager $em, array $classes) { $calc = new CommitOrderCalculator(); foreach ($classes as $class) { $calc->addClass($class); foreach ($class->associationMappings as $assoc) { if ($assoc->isOwningSide) { $targetClass = $em->getClassMetadata($assoc->targetEntityName); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } // add dependency ($targetClass before $class) $calc->addDependency($targetClass, $class); } } } return $calc->getCommitOrder(); }
/** * Returns the reverse commit order for the given classes * * @param array $classes An array of ClassMetadata instances * * @return array */ private function getReverseCommitOrder(array $classes) { $calculator = new CommitOrderCalculator(); foreach ($classes as $class) { $calculator->addClass($class); } return array_reverse($calculator->getCommitOrder()); }
private function _getCommitOrder(array $classes) { $calc = new CommitOrderCalculator(); // Calculate dependencies foreach ($classes as $class) { $calc->addClass($class); foreach ($class->associationMappings as $assoc) { if ($assoc->isOwningSide) { $targetClass = $this->_em->getClassMetadata($assoc->targetEntityName); if (!$calc->hasClass($targetClass->name)) { $calc->addClass($targetClass); } // add dependency ($targetClass before $class) $calc->addDependency($targetClass, $class); } } } return $calc->getCommitOrder(); }