/**
  * Create a new repository instance for an entity class.
  *
  * @param \Doctrine\ORM\EntityManagerInterface $entityManager The EntityManager instance.
  * @param string                               $entityName    The name of the entity.
  *
  * @return \Doctrine\Common\Persistence\ObjectRepository
  */
 private function createRepository(EntityManagerInterface $entityManager, $entityName)
 {
     /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */
     $metadata = $entityManager->getClassMetadata($entityName);
     $repositoryClassName = $metadata->customRepositoryClassName ?: $entityManager->getConfiguration()->getDefaultRepositoryClassName();
     return new $repositoryClassName($entityManager, $metadata);
 }
Пример #2
0
 /**
  * {@inheritDoc}
  */
 protected function createProxyDefinition($className)
 {
     $cm = $this->em->getClassMetadata($className);
     return new ProxyDefinition(ClassUtils::generateProxyClassName($className, $this->proxyNamespace), $cm->getIdentifierFieldNames(), $cm->getReflectionProperties(), function (BaseProxy $proxy) use($cm) {
         if ($proxy->__isInitialized()) {
             return;
         }
     }, function (BaseProxy $proxy) use($cm) {
         if ($proxy->__isInitialized()) {
             return;
         }
     });
 }
Пример #3
0
 public function getHydratorFor($className)
 {
     if (isset($this->hydrators[$className])) {
         return $this->hydrators[$className];
     }
     $hydratorClassName = str_replace('\\', '', $className) . 'Hydrator';
     $fqn = $this->hydratorNamespace . '\\' . $hydratorClassName;
     $fileName = $this->hydratorDir . DIRECTORY_SEPARATOR . $hydratorClassName . '.php';
     $this->generateHydratorClass($className, $fileName);
     require $fileName;
     $cm = $this->em->getClassMetadata($className);
     $this->hydrators[$className] = new $fqn($this->em, $cm);
     return $this->hydrators[$className];
 }
Пример #4
0
 /**
  * Creates a managed entity
  * 
  * @param string $className
  * @param array $data
  */
 public function getOrCreateEntity($className, array $data)
 {
     $cm = $this->em->getClassMetadata($className);
     $entity = $cm->newInstance();
     $oid = spl_object_hash($entity);
     $id = $this->flattenIdentifier($data, $cm);
     $this->cs->identifiers[$oid] = $id;
     $this->cs->states[$oid] = self::STATE_MANAGED;
     $this->cs->originalEntityData[$oid] = $data;
     $this->cs->identityMap[$cm->rootName][$id] = $entity;
     foreach ($data as $field => $value) {
         if (isset($cm->fieldMappings[$field])) {
             $cm->reflFields[$field]->setValue($entity, $value);
         }
     }
     foreach ($cm->associationMappings as $field => $assoc) {
         $associationId = isset($data[$field]) ? $data[$field] : null;
         $associationMetadata = $this->em->getClassMetadata($assoc['target']);
         $associationIdentifiers = $associationMetadata->getIdentifier();
         if (ClassMetadata::REFERENCE_ONE === $cm->getTypeOfAssociation($field)) {
             if ($associationId) {
                 $newValue = $this->em->getProxyFactory()->getProxy($assoc['target'], [$associationIdentifiers[0] => $associationId]);
                 $cm->reflFields[$field]->setValue($entity, $newValue);
             }
         } elseif (ClassMetadata::REFERENCE_MANY === $cm->getTypeOfAssociation($field)) {
             $collection = new ArrayCollection();
             foreach ($associationId as $id) {
                 $newValue = $this->em->getProxyFactory()->getProxy($assoc['target'], [$associationIdentifiers[0] => $id]);
                 $collection->add($newValue);
             }
             $cm->reflFields[$field]->setValue($entity, $collection);
         }
     }
     return $entity;
 }
Пример #5
0
 /**
  * @inheritdoc
  */
 protected function initialize()
 {
     $this->driver = $this->em->getConfiguration()->getMetadataDriverImpl();
     $this->initialized = true;
 }