public setNoMigrationException ( boolean $noMigrationException = false ) | ||
$noMigrationException | boolean | Throw an exception or not if no migration is found. Mostly for Continuous Integration. |
/** * @Route("/{connectionName}/execute/{version}") * @Method("POST") */ public function executeAction($connectionName, $version) { $connection = $this->getDoctrine()->getConnection($connectionName); $outputWriter = new MemoryOutputWriter(); $configuration = new Configuration($connection); $configuration->setName($this->container->getParameter('doctrine_migrations.name')); $configuration->setOutputWriter($outputWriter); $configuration->setMigrationsTableName($this->container->getParameter('doctrine_migrations.table_name')); $configuration->setMigrationsDirectory($this->container->getParameter('doctrine_migrations.dir_name')); $configuration->setMigrationsNamespace($this->container->getParameter('doctrine_migrations.namespace')); $migration = new Migration($configuration); $currentVersion = $configuration->getCurrentVersion(); $dryRun = false; $migration->setNoMigrationException(true); $sql = $migration->migrate($version, $dryRun, true); return $this->render('MarkeiDoctrineMigrationWebBundle:Migrate:execute.html.twig', ['connectionName' => $connectionName, 'to' => $version, 'from' => $currentVersion, 'output' => $outputWriter->getMemory(), 'name' => $this->container->getParameter('doctrine_migrations.name')]); }
public function execute(InputInterface $input, OutputInterface $output) { $configuration = $this->getMigrationConfiguration($input, $output); $migration = new Migration($configuration); $this->outputHeader($configuration, $output); $timeAllqueries = $input->getOption('query-time'); $executedMigrations = $configuration->getMigratedVersions(); $availableMigrations = $configuration->getAvailableVersions(); $version = $this->getVersionNameFromAlias($input->getArgument('version'), $output, $configuration); if ($version === false) { return 1; } $executedUnavailableMigrations = array_diff($executedMigrations, $availableMigrations); if (!empty($executedUnavailableMigrations)) { $output->writeln(sprintf('<error>WARNING! You have %s previously executed migrations' . ' in the database that are not registered migrations.</error>', count($executedUnavailableMigrations))); foreach ($executedUnavailableMigrations as $executedUnavailableMigration) { $output->writeln(sprintf(' <comment>>></comment> %s (<comment>%s</comment>)', $configuration->getDateTime($executedUnavailableMigration), $executedUnavailableMigration)); } $question = 'Are you sure you wish to continue? (y/n)'; if (!$this->canExecute($question, $input, $output)) { $output->writeln('<error>Migration cancelled!</error>'); return 1; } } if ($path = $input->getOption('write-sql')) { $path = is_bool($path) ? getcwd() : $path; $migration->writeSqlFile($path, $version); } else { $dryRun = (bool) $input->getOption('dry-run'); // warn the user if no dry run and interaction is on if (!$dryRun) { $question = 'WARNING! You are about to execute a database migration' . ' that could result in schema changes and data lost.' . ' Are you sure you wish to continue? (y/n)'; if (!$this->canExecute($question, $input, $output)) { $output->writeln('<error>Migration cancelled!</error>'); return 1; } } $migration->setNoMigrationException($input->getOption('allow-no-migration')); $sql = $migration->migrate($version, $dryRun, $timeAllqueries); if (empty($sql)) { $output->writeln('<comment>No migrations to execute.</comment>'); } } }