public function testSetPrimaryTableRelated()
 {
     $this->builder->addUniqueConstraint(array('username', 'name'), 'users_idx');
     $this->builder->addIndex(array('username', 'name'), 'users_idx');
     $this->builder->setTable('users');
     $this->assertEquals(array('name' => 'users', 'indexes' => array('users_idx' => array('columns' => array('username', 'name'))), 'uniqueConstraints' => array('users_idx' => array('columns' => array('username', 'name')))), $this->cm->table);
 }
 /**
  * @param LoadClassMetadataEventArgs $event
  */
 public function loadClassMetadata(LoadClassMetadataEventArgs $event)
 {
     // HOT FIX for PIM-3683, when using MongoDB with PIM some queries are executed before that the schema is created
     return;
     /** @var OroEntityManager $em */
     $em = $event->getEntityManager();
     $configProvider = $em->getExtendManager()->getConfigProvider();
     $className = $event->getClassMetadata()->getName();
     if ($configProvider->hasConfig($className)) {
         $config = $configProvider->getConfig($className);
         if ($config->is('is_extend')) {
             $cmBuilder = new ClassMetadataBuilder($event->getClassMetadata());
             if ($config->is('index')) {
                 foreach ($config->get('index') as $columnName => $enabled) {
                     $fieldConfig = $configProvider->getConfig($className, $columnName);
                     if ($enabled && !$fieldConfig->is('state', ExtendManager::STATE_NEW)) {
                         $cmBuilder->addIndex(array(ExtendConfigDumper::FIELD_PREFIX . $columnName), 'oro_idx_' . $columnName);
                     }
                 }
             }
             $this->prepareRelations($config, $cmBuilder);
         }
         $em->getMetadataFactory()->setMetadataFor($className, $event->getClassMetadata());
     }
 }
예제 #3
0
 /**
  * {@inheritdoc}
  */
 public function build(ClassMetadataBuilder $metadataBuilder, ConfigInterface $extendConfig)
 {
     $className = $extendConfig->getId()->getClassName();
     $indices = $extendConfig->get('index');
     // TODO: need to be changed to fieldName => columnName
     // TODO: should be done in scope https://magecore.atlassian.net/browse/BAP-3940
     foreach ($indices as $columnName => $enabled) {
         $fieldConfig = $this->extendConfigProvider->getConfig($className, $columnName);
         if ($enabled && !$fieldConfig->is('state', ExtendScope::STATE_NEW)) {
             $indexName = $this->nameGenerator->generateIndexNameForExtendFieldVisibleInGrid($className, $columnName);
             $metadataBuilder->addIndex([$columnName], $indexName);
         }
     }
 }
 /**
  * Loads the metadata for the specified class into the provided container.
  *
  * @param string $className
  * @param ClassMetadata|\Doctrine\ORM\Mapping\ClassMetadata $metadata
  *
  * @return void
  */
 public function loadMetadataForClass($className, ClassMetadata $metadata)
 {
     $mapping = config(sprintf('doctrine.mappings.%s', $className));
     $builder = new ClassMetadataBuilder($metadata);
     if (!empty($mapping['abstract'])) {
         $builder->setMappedSuperClass();
     }
     if (!empty($mapping['table'])) {
         $builder->setTable($mapping['table']);
     }
     if (!empty($mapping['indexes'])) {
         foreach ($mapping['indexes'] as $name => $columns) {
             $builder->addIndex($columns, $name);
         }
     }
     if (!empty($mapping['repository'])) {
         $builder->setCustomRepositoryClass($mapping['repository']);
     }
     if (!empty($mapping['fields'])) {
         foreach ($mapping['fields'] as $fieldName => $fieldConfig) {
             $this->mapField($builder, $fieldName, $fieldConfig);
         }
     }
 }
예제 #5
0
파일: Index.php 프로젝트: guiwoda/fluent
 /**
  * Execute the build process
  */
 public function build()
 {
     $this->builder->addIndex($this->getColumns(), $this->getName());
 }
예제 #6
0
 /**
  * Loads the metadata for the specified class into the provided container.
  *
  * @param string                              $className
  * @param \Doctrine\ORM\Mapping\ClassMetadata $metadata
  */
 public function loadMetadataForClass($className, ClassMetadata $metadata)
 {
     global $container;
     $builder = new ClassMetadataBuilder($metadata);
     $tableName = static::classToTableName($className);
     $this->loadDataContainer($tableName);
     try {
         /** @var ClassLoader $entitiesClassLoader */
         $entitiesClassLoader = $container['doctrine.orm.entitiesClassLoader'];
         if (!class_exists($className, false)) {
             $entitiesClassLoader->loadClass($className);
         }
         if (class_exists($className, false)) {
             $class = new \ReflectionClass($className);
         } else {
             $class = false;
         }
     } catch (\Exception $e) {
         $class = false;
     }
     if (!array_key_exists('TL_DCA', $GLOBALS)) {
         $GLOBALS['TL_DCA'] = array();
     }
     if (!array_key_exists($tableName, $GLOBALS['TL_DCA']) || !is_array($GLOBALS['TL_DCA'][$tableName])) {
         $GLOBALS['TL_DCA'][$tableName] = array('fields' => array());
     }
     $entityConfig = array();
     if (array_key_exists('entity', $GLOBALS['TL_DCA'][$tableName])) {
         $entityConfig = $GLOBALS['TL_DCA'][$tableName]['entity'];
     }
     if ($class && !$class->isInstantiable()) {
         $metadata->isMappedSuperclass = true;
     } elseif (array_key_exists('isMappedSuperclass', $entityConfig)) {
         $metadata->isMappedSuperclass = $entityConfig['isMappedSuperclass'];
     }
     // custom repository class
     if (array_key_exists('repositoryClass', $entityConfig)) {
         $metadata->setCustomRepositoryClass($entityConfig['repositoryClass']);
     } else {
         $metadata->setCustomRepositoryClass('Contao\\Doctrine\\ORM\\Repository');
     }
     // id generator
     if (array_key_exists('idGenerator', $entityConfig)) {
         $metadata->setIdGeneratorType($entityConfig['idGenerator']);
     } else {
         $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);
     }
     // indexes
     if (isset($entityConfig['indexes'])) {
         if (is_array($entityConfig['indexes'])) {
             foreach ($entityConfig['indexes'] as $name => $columns) {
                 if (is_array($columns)) {
                     $builder->addIndex($columns, $name);
                 } else {
                     throw new \RuntimeException(sprintf('$GLOBALS[TL_DCA][%s][entity][indexes][%s] must be an array', $tableName, $name));
                 }
             }
         } else {
             throw new \RuntimeException(sprintf('$GLOBALS[TL_DCA][%s][entity][indexes] must be an array', $tableName));
         }
     }
     // uniques
     if (isset($entityConfig['uniques'])) {
         if (is_array($entityConfig['uniques'])) {
             foreach ($entityConfig['uniques'] as $name => $columns) {
                 if (is_array($columns)) {
                     $builder->addUniqueConstraint($columns, $name);
                 } else {
                     throw new \RuntimeException(sprintf('$GLOBALS[TL_DCA][%s][entity][uniques][%s] must be an array', $tableName, $name));
                 }
             }
         } else {
             throw new \RuntimeException(sprintf('$GLOBALS[TL_DCA][%s][entity][uniques] must be an array', $tableName));
         }
     }
     $metadata->setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE);
     $metadata->setPrimaryTable(array('name' => $tableName));
     $fields = (array) $GLOBALS['TL_DCA'][$tableName]['fields'];
     foreach ($fields as $fieldName => $fieldConfig) {
         $configured = array_key_exists('field', $fieldConfig) || array_key_exists('oneToOne', $fieldConfig) || array_key_exists('oneToMany', $fieldConfig) || array_key_exists('manyToOne', $fieldConfig) || array_key_exists('manyToMany', $fieldConfig);
         if (!$configured && empty($fieldConfig['inputType']) || $configured && $fieldConfig['field'] === false) {
             continue;
         }
         if (isset($fieldConfig['oneToOne'])) {
             $fieldConfig['oneToOne']['fieldName'] = $fieldName;
             $metadata->mapOneToOne($fieldConfig['oneToOne']);
         } elseif (isset($fieldConfig['oneToMany'])) {
             $fieldConfig['oneToMany']['fieldName'] = $fieldName;
             $metadata->mapOneToMany($fieldConfig['oneToMany']);
         } elseif (isset($fieldConfig['manyToOne'])) {
             $fieldConfig['manyToOne']['fieldName'] = $fieldName;
             $metadata->mapManyToOne($fieldConfig['manyToOne']);
         } elseif (isset($fieldConfig['manyToMany'])) {
             $fieldConfig['manyToMany']['fieldName'] = $fieldName;
             $metadata->mapManyToMany($fieldConfig['manyToMany']);
         } else {
             $fieldMapping = array();
             $inputTypes = array($fieldConfig['inputType']);
             $inputTypeOptions = array();
             if ($fieldConfig['foreignKey']) {
                 $inputTypeOptions[] = 'foreignKey';
             }
             if ($fieldConfig['eval']['multiple']) {
                 $inputTypeOptions[] = 'multiple';
             }
             for ($i = 0; $i < count($inputTypeOptions); $i++) {
                 $inputTypeOption = $fieldConfig['inputType'] . '_' . $inputTypeOptions[$i];
                 array_unshift($inputTypes, $inputTypeOption);
                 for ($j = $i + 1; $j < count($inputTypeOptions); $j++) {
                     $inputTypeOption .= '_' . $inputTypeOptions[$j];
                     array_unshift($inputTypes, $inputTypeOption);
                 }
             }
             foreach ($inputTypes as $inputType) {
                 if (array_key_exists($inputType, $GLOBALS['DOCTRINE_TYPE_MAP'])) {
                     $fieldMapping = $GLOBALS['DOCTRINE_TYPE_MAP'][$inputType];
                     break;
                 }
             }
             if (isset($fieldConfig['eval']['maxlength'])) {
                 $fieldMapping['length'] = (int) $fieldConfig['eval']['maxlength'];
             }
             if (isset($fieldConfig['eval']['unique'])) {
                 $fieldMapping['unique'] = (bool) $fieldConfig['eval']['unique'];
             }
             if (array_key_exists('field', $fieldConfig)) {
                 $fieldMapping = array_merge($fieldMapping, $fieldConfig['field']);
             }
             $fieldMapping['fieldName'] = $fieldName;
             $metadata->mapField($fieldMapping);
         }
     }
     /*
     if (TL_MODE == 'BE' && !$metadata->isMappedSuperclass) {
     	EntityGeneration::generateEntity($metadata);
     }
     */
 }