/**
  * @param OrmConfiguration $configuration
  */
 public function addEntityNamespaces(OrmConfiguration $configuration)
 {
     $this->knownNamespaceAlias = array_merge($this->knownNamespaceAlias, $configuration->getEntityNamespaces());
     if ($configuration->getMetadataDriverImpl()) {
         $this->entityClassnames = array_merge($this->entityClassnames, $configuration->getMetadataDriverImpl()->getAllClassNames());
     }
 }
예제 #2
0
 public function testSetGetMetadataDriverImpl()
 {
     $this->assertSame(null, $this->configuration->getMetadataDriverImpl());
     // defaults
     $metadataDriver = $this->getMock('Doctrine\\Common\\Persistence\\Mapping\\Driver\\MappingDriver');
     $this->configuration->setMetadataDriverImpl($metadataDriver);
     $this->assertSame($metadataDriver, $this->configuration->getMetadataDriverImpl());
 }
 /**
  * Set the association mappings of a metadata.
  *
  * @param ClassMetadataInfo $metadata
  * @param Configuration     $configuration
  */
 protected function setAssociationMappings(ClassMetadataInfo $metadata, Configuration $configuration)
 {
     $supportedClasses = $configuration->getMetadataDriverImpl()->getAllClassNames();
     foreach (class_parents($metadata->getName()) as $parent) {
         if (in_array($parent, $supportedClasses)) {
             $parentMetadata = new OrmClassMetadata($parent, $configuration->getNamingStrategy());
             $configuration->getMetadataDriverImpl()->loadMetadataForClass($parent, $parentMetadata);
             foreach ($parentMetadata->getAssociationMappings() as $key => $value) {
                 if ($this->hasRelation($value['type'])) {
                     $metadata->associationMappings[$key] = $value;
                 }
             }
         }
     }
 }
예제 #4
0
 /**
  * {@inheritdoc}
  */
 public static function create($conn, Configuration $config, EventManager $eventManager = null)
 {
     if (!$config->getMetadataDriverImpl()) {
         throw ORMException::missingMappingDriverImpl();
     }
     switch (true) {
         case is_array($conn):
             if (!$eventManager) {
                 $eventManager = new EventManager();
             }
             if (isset($conn['prefix']) && $conn['prefix']) {
                 $eventManager->addEventListener(Events::loadClassMetadata, new TablePrefix($conn['prefix']));
             }
             $conn = \Doctrine\DBAL\DriverManager::getConnection($conn, $config, $eventManager);
             break;
         case $conn instanceof Connection:
             if ($eventManager !== null && $conn->getEventManager() !== $eventManager) {
                 throw ORMException::mismatchedEventManager();
             }
             break;
         default:
             throw new \InvalidArgumentException("Invalid argument: " . $conn);
     }
     return new self($conn, $config, $conn->getEventManager());
 }
 /**
  * @param ClassMetadataInfo           $metadata
  * @param \Doctrine\ORM\Configuration $configuration
  */
 private function setAssociationMappings(ClassMetadataInfo $metadata, $configuration)
 {
     foreach (class_parents($metadata->getName()) as $parent) {
         $parentMetadata = new ClassMetadata($parent, $configuration->getNamingStrategy());
         if (in_array($parent, $configuration->getMetadataDriverImpl()->getAllClassNames())) {
             $configuration->getMetadataDriverImpl()->loadMetadataForClass($parent, $parentMetadata);
             if ($parentMetadata->isMappedSuperclass) {
                 foreach ($parentMetadata->getAssociationMappings() as $key => $value) {
                     if ($this->hasRelation($value['type'])) {
                         $metadata->associationMappings[$key] = $value;
                     }
                 }
             }
         }
     }
 }
예제 #6
0
 /**
  * @param                        $connection
  * @param Extension              $extension
  * @param EntityManagerInterface $em
  * @param EventManager           $evm
  * @param Configuration          $configuration
  */
 protected function bootExtension($connection, Extension $extension, EntityManagerInterface $em, EventManager $evm, Configuration $configuration)
 {
     $extension->addSubscribers($evm, $em, $configuration->getMetadataDriverImpl()->getReader());
     if (is_array($extension->getFilters())) {
         foreach ($extension->getFilters() as $name => $filter) {
             $configuration->addFilter($name, $filter);
             $em->getFilters()->enable($name);
         }
     }
     $this->markAsBooted($connection, $extension);
 }
 /**
  * Enable Gedmo Doctrine Extensions
  *
  * @param array $namespaces
  * @param bool  $all
  */
 public function bootGedmoExtensions($namespaces = ['App'], $all = true)
 {
     if ($all) {
         DoctrineExtensions::registerMappingIntoDriverChainORM($this->chain, $this->reader);
     } else {
         DoctrineExtensions::registerAbstractMappingIntoDriverChainORM($this->chain, $this->reader);
     }
     $driver = $this->metadata->getMetadataDriverImpl();
     foreach ($namespaces as $namespace) {
         $this->chain->addDriver($driver, $namespace);
     }
     $this->metadata->setMetadataDriverImpl($this->chain);
     $this->dispatcher->fire('doctrine.driver-chain::booted', [$driver, $this->chain]);
 }
예제 #8
0
 public function testLoadClassMetadataWithoutParent()
 {
     $this->loadClassMetadataEvent->getClassMetadata()->willReturn($this->classMetadata->reveal());
     $this->classMetadata->getName()->willReturn(get_class($this->object->reveal()));
     $this->classMetadata->setCustomRepositoryClass('Sulu\\Bundle\\ContactBundle\\Entity\\ContactRepository')->shouldNotBeCalled();
     $this->loadClassMetadataEvent->getEntityManager()->willReturn($this->entityManager->reveal());
     $this->entityManager->getConfiguration()->willReturn($this->configuration->reveal());
     $this->configuration->getNamingStrategy()->willReturn(null);
     /** @var \Doctrine\Common\Persistence\Mapping\Driver\MappingDriver $mappingDriver */
     $mappingDriver = $this->prophesize('Doctrine\\Common\\Persistence\\Mapping\\Driver\\MappingDriver');
     $this->configuration->getMetadataDriverImpl()->willReturn($mappingDriver->reveal());
     $mappingDriver->getAllClassNames()->willReturn([get_class($this->parentObject->reveal())]);
     $mappingDriver->loadMetadataForClass(get_class($this->parentObject->reveal()), Argument::type('Doctrine\\ORM\\Mapping\\ClassMetadata'))->shouldBeCalled();
     $this->subscriber->loadClassMetadata($this->loadClassMetadataEvent->reveal());
 }
예제 #9
0
 public static function create($conn, Configuration $config, EventManager $eventManager = null)
 {
     if (!$config->getMetadataDriverImpl()) {
         throw ORMException::missingMappingDriverImpl();
     }
     if (is_array($conn)) {
         $conn = \Doctrine\DBAL\DriverManager::getConnection($conn, $config, $eventManager ?: new EventManager());
     } elseif ($conn instanceof Connection) {
         if ($eventManager !== null && $conn->getEventManager() !== $eventManager) {
             throw ORMException::mismatchedEventManager();
         }
     } else {
         throw new \InvalidArgumentException("Invalid argument: " . $conn);
     }
     return new OroEntityManager($conn, $config, $conn->getEventManager());
 }
예제 #10
0
 /**
  * Factory method to create EntityManager instances.
  *
  * @param \Doctrine\DBAL\Connection|array $conn
  * @param \Doctrine\ORM\Configuration $config
  * @param \Doctrine\Common\EventManager $eventManager
  * @throws \Doctrine\ORM\ORMException
  * @throws InvalidArgumentException
  * @throws \Doctrine\ORM\ORMException
  * @return EntityManager
  */
 public static function create($conn, Doctrine\ORM\Configuration $config, Doctrine\Common\EventManager $eventManager = NULL)
 {
     if (!$config->getMetadataDriverImpl()) {
         throw ORMException::missingMappingDriverImpl();
     }
     switch (TRUE) {
         case is_array($conn):
             $conn = DriverManager::getConnection($conn, $config, $eventManager ?: new Doctrine\Common\EventManager());
             break;
         case $conn instanceof Doctrine\DBAL\Connection:
             if ($eventManager !== NULL && $conn->getEventManager() !== $eventManager) {
                 throw ORMException::mismatchedEventManager();
             }
             break;
         default:
             throw new InvalidArgumentException("Invalid connection");
     }
     return new EntityManager($conn, $config, $conn->getEventManager());
 }
예제 #11
0
 /**
  * Copied from Doctrine\ORM\EntityManager, cause return use new EntityManager() instead of new static()
  *
  * @param mixed $conn
  * @param Configuration $config
  * @param EventManager|null $eventManager
  * @return EntityManager
  * @throws ORMException
  * @throws \Doctrine\DBAL\DBALException
  */
 public static function create($conn, Configuration $config, EventManager $eventManager = null)
 {
     if (!$config->getMetadataDriverImpl()) {
         throw ORMException::missingMappingDriverImpl();
     }
     switch (true) {
         case is_array($conn):
             $conn = \Doctrine\DBAL\DriverManager::getConnection($conn, $config, $eventManager ?: new EventManager());
             break;
         case $conn instanceof Connection:
             if ($eventManager !== null && $conn->getEventManager() !== $eventManager) {
                 throw ORMException::mismatchedEventManager();
             }
             break;
         default:
             throw new \InvalidArgumentException("Invalid argument: " . $conn);
     }
     return new static($conn, $config, $conn->getEventManager());
 }
 /**
  * @param array         $settings
  * @param Configuration $configuration
  */
 protected function setCustomMappingDriverChain(array $settings = [], Configuration $configuration)
 {
     $chain = new MappingDriverChain($configuration->getMetadataDriverImpl(), 'LaravelDoctrine');
     foreach (array_get($settings, 'namespaces', []) as $alias => $namespace) {
         if (is_string($alias)) {
             $configuration->addEntityNamespace($alias, $namespace);
         }
         $chain->addNamespace($namespace);
     }
     $configuration->setMetadataDriverImpl($chain);
 }
예제 #13
0
 /**
  * @param Configuration $configuration
  *
  * @return array
  */
 private function getAllClassNames(Configuration $configuration)
 {
     if (!$this->classNames) {
         $this->classNames = $configuration->getMetadataDriverImpl()->getAllClassNames();
     }
     return $this->classNames;
 }
예제 #14
0
 public function __construct(\Doctrine\ORM\Configuration $Configuration)
 {
     $this->driver = $Configuration->getMetadataDriverImpl();
     $this->cachedMap = array();
 }
예제 #15
0
 /**
  * Factory method to create EntityManager instances.
  *
  * @param array|Connection $connection   An array with the connection parameters or an existing Connection instance.
  * @param Configuration    $config       The Configuration instance to use.
  * @param EventManager     $eventManager The EventManager instance to use.
  *
  * @return EntityManager The created EntityManager.
  *
  * @throws \InvalidArgumentException
  * @throws ORMException
  */
 public static function create($connection, Configuration $config, EventManager $eventManager = null)
 {
     if (!$config->getMetadataDriverImpl()) {
         throw ORMException::missingMappingDriverImpl();
     }
     $connection = static::createConnection($connection, $config, $eventManager);
     return new EntityManager($connection, $config, $connection->getEventManager());
 }
 /**
  * Returns the class names of additional entities that are directly associated with
  * one of the entities that is explicitly mentioned in the given configuration.
  *
  * @param Configuration $config
  * @param string[] $entityClasses Classes whose associations are checked.
  * @return string[] Associated entity classes.
  */
 protected function getDirectlyAssociatedEntities(Configuration $config, $entityClasses)
 {
     if (count($entityClasses) === 0) {
         return array();
     }
     $associatedEntities = array();
     foreach ($entityClasses as $entityClass) {
         /* @var $entityClass string */
         $metadata = new ClassMetadata($entityClass);
         $metadata->initializeReflection($this->reflectionService);
         $config->getMetadataDriverImpl()->loadMetadataForClass($entityClass, $metadata);
         foreach ($metadata->getAssociationNames() as $name) {
             /* @var $name string */
             $associatedEntity = $metadata->getAssociationTargetClass($name);
             $associatedEntities[] = $metadata->fullyQualifiedClassName($associatedEntity);
         }
         if (count($metadata->discriminatorMap) > 0) {
             $childClasses = array_values($metadata->discriminatorMap);
             $associatedEntities = array_merge($associatedEntities, $childClasses);
         }
         // Add parent classes that are involved in some kind of entity inheritance.
         foreach ($this->reflectionService->getParentClasses($entityClass) as $parentClass) {
             if (!$config->getMetadataDriverImpl()->isTransient($parentClass)) {
                 $associatedEntities[] = $parentClass;
             }
         }
     }
     return array_unique($associatedEntities);
 }
 /**
  * @param Configuration $configuration
  * @param Connection    $connection
  * @param EventManager  $eventManager
  */
 public function extend(Configuration $configuration, Connection $connection, EventManager $eventManager)
 {
     foreach ($this->subscribers as $subscriber) {
         $eventManager->addEventSubscriber($this->container->make($subscriber, [$configuration->getMetadataDriverImpl()->getReader()]));
     }
 }