/** * {@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; } }); }
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]; }
/** * 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; }
/** * 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); }