示例#1
0
 /**
  * @inheritdoc
  */
 public function createProxyDefinition($className)
 {
     /** @var ClassMetadata $classMetadata */
     $classMetadata = $this->metadataFactory->getMetadataFor($className);
     $documentPersister = $this->uow->getDocumentPersister($className);
     $reflectionFields = $classMetadata->getReflectionProperties();
     $reflectionId = $reflectionFields[$classMetadata->getRidPropertyName()];
     return new ProxyDefinition(ClassUtils::generateProxyClassName($className, $this->proxyNamespace), $classMetadata->getIdentifierFieldNames(), $reflectionFields, $this->createInitializer($classMetadata, $documentPersister, $reflectionId), $this->createCloner($classMetadata, $documentPersister, $reflectionId));
 }
 private function getDocReference($ref)
 {
     $oid = spl_object_hash($ref);
     if (isset($this->references[$oid])) {
         return $this->references[$oid];
     }
     /** @var ClassMetadata $rmd */
     $rmd = $this->metadataFactory->getMetadataFor(get_class($ref));
     $rid = $rmd->getIdentifierValue($ref);
     if ($rid === null) {
         throw new ODMOrientDbException('missing reference');
     }
     static $rid_type;
     if (!isset($rid_type)) {
         $rid_type = Type::getType('rid');
     }
     return $rid_type->convertToDatabaseValue($rid);
 }
 /**
  * Gets the commit order for all the classes available via the provided {@see ClassMetadataFactory}
  *
  * @param ClassMetadataFactory $mdf
  *
  * @return \string[]
  */
 public static function getCommitOrderFromMetadata(ClassMetadataFactory $mdf)
 {
     $cd = $mdf->getCacheDriver();
     if ($cd->contains(self::CACHE_KEY)) {
         return $cd->fetch(self::CACHE_KEY);
     }
     $co = new self();
     /** @var ClassMetadata $class */
     foreach ($mdf->getAllMetadata() as $class) {
         $co->classes[$class->name] = $class;
         foreach ($class->associationMappings as $assoc) {
             if (!isset($assoc['reference']) || !isset($assoc['targetDoc'])) {
                 continue;
             }
             /** @var ClassMetadata $dependency */
             $dependency = $mdf->getMetadataFor($assoc['targetDoc']);
             if (!$co->hasDependency($dependency, $class)) {
                 $co->addDependency($dependency, $class);
             }
             // If the target class has mapped subclasses, these share the same dependency.
             //                if ( ! $targetClass->subClasses) {
             //                    continue;
             //                }
             //
             //                foreach ($targetClass->subClasses as $subClassName) {
             //                    $targetSubClass = $this->dm->getClassMetadata($subClassName);
             //
             //                    if ( ! $calc->hasClass($subClassName)) {
             //                        $calc->addClass($targetSubClass);
             //
             //                        $newNodes[] = $targetSubClass;
             //                    }
             //
             //                    $calc->addDependency($targetSubClass, $class);
             //                }
         }
     }
     $ordered = $co->getCommitOrder();
     $cd->save(self::CACHE_KEY, $ordered);
     return $ordered;
 }
 /**
  * Gets the $class Metadata.
  *
  * @param   string $class
  *
  * @return \Doctrine\ODM\OrientDB\Mapping\ClassMetadata
  */
 public function getClassMetadata($class)
 {
     return $this->metadataFactory->getMetadataFor($class);
 }