/** * @param LoggerInterface $logger * @param bool $dryRun */ protected function runActivityLists(LoggerInterface $logger, $dryRun = false) { // @todo: this workaround should be removed in BAP-9156 $this->configManager->clear(); $targetEntities = $this->provider->getTargetEntityClasses(false); $toSchema = clone $this->schema; $hasSchemaChanges = false; foreach ($targetEntities as $targetEntity) { $associationName = ExtendHelper::buildAssociationName($targetEntity, ActivityListEntityConfigDumperExtension::ASSOCIATION_KIND); $relationTableName = $this->nameGenerator->generateManyToManyJoinTableName(ActivityListEntityConfigDumperExtension::ENTITY_CLASS, $associationName, $targetEntity); if (!$toSchema->hasTable($relationTableName)) { $hasSchemaChanges = true; $this->activityListExtension->addActivityListAssociation($toSchema, $this->metadataHelper->getTableNameByEntityClass($targetEntity)); } } if ($hasSchemaChanges) { $comparator = new Comparator(); $platform = $this->connection->getDatabasePlatform(); $schemaDiff = $comparator->compare($this->schema, $toSchema); $queries = $schemaDiff->toSql($platform); foreach ($queries as $query) { $this->logQuery($logger, $query); if (!$dryRun) { $this->connection->executeQuery($query); } } } }
/** * Load entity configs from annotations to a database * * @param bool $force Force overwrite config's option values * @param callable|null $filter function (ClassMetadata[] $doctrineAllMetadata) * @param LoggerInterface|null $logger * @param bool $dryRun Log modifications without apply them * * @throws \Exception */ public function load($force = false, \Closure $filter = null, LoggerInterface $logger = null, $dryRun = false) { $this->logger = $logger ?: new NullLogger(); try { $entityManagers = $this->entityManagerBag->getEntityManagers(); foreach ($entityManagers as $em) { /** @var ClassMetadata[] $doctrineAllMetadata */ $doctrineAllMetadata = $em->getMetadataFactory()->getAllMetadata(); if (null !== $filter) { $doctrineAllMetadata = $filter($doctrineAllMetadata); } foreach ($doctrineAllMetadata as $metadata) { $this->loadEntityConfigs($metadata, $force); } } if ($dryRun) { $this->configManager->clear(); } else { $this->configManager->flush(); $this->configManager->flushAllCaches(); } } catch (\Exception $ex) { $this->logger = null; throw $ex; } }
/** * @param array $configs * @param LoggerInterface|null $logger * @param bool $dryRun Log modifications without apply them * @throws \Exception */ public function processConfigs(array $configs, LoggerInterface $logger = null, $dryRun = false) { $this->logger = $logger ?: new NullLogger(); try { if (!empty($configs)) { $this->appendConfigs = $this->getAndRemoveElement($configs, self::APPEND_CONFIGS, []); $renameConfigs = $this->getAndRemoveElement($configs, self::RENAME_CONFIGS, []); $this->filterConfigs($configs); $hasChanges = false; if (!empty($configs)) { foreach ($configs as $className => $entityConfigs) { $this->processEntityConfigs($className, $entityConfigs); } $hasChanges = true; } if ($this->renameFields($renameConfigs)) { $hasChanges = true; } if ($hasChanges) { if ($dryRun) { $this->configManager->clear(); } else { $this->configManager->flush(); $this->configManager->clearCache(); } } } } catch (\Exception $ex) { $this->logger = null; throw $ex; } }