/** * @param Symfony\Component\Console\Input\InputInterface * @param Symfony\Component\Console\Output\OutputInterface */ public function execute(InputInterface $input, OutputInterface $output) { $version = $input->getArgument('version'); $configuration = $this->getMigrationConfiguration($input, $output); $migration = $this->createMigration($configuration); $this->outputHeader($configuration, $output); $noInteraction = !$input->isInteractive(); $executedVersions = $configuration->getMigratedVersions(); $availableVersions = $configuration->getAvailableVersions(); $executedUnavailableVersions = array_diff($executedVersions, $availableVersions); if ($executedUnavailableVersions) { $output->writeln(sprintf('<error>WARNING! You have %s previously executed migrations in the database that are not registered migrations.</error>', count($executedUnavailableVersions))); foreach ($executedUnavailableVersions as $executedUnavailableVersion) { $output->writeln(sprintf(' <comment>>></comment> %s (<comment>%s</comment>)', Configuration::formatVersion($executedUnavailableVersion), $executedUnavailableVersion)); } if (!$noInteraction) { $confirmation = $this->getHelper('dialog')->askConfirmation($output, '<question>Are you sure you wish to continue? (y/n)</question>', false); if (!$confirmation) { $output->writeln('<error>Migration cancelled!</error>'); return 1; } } } // warn the user if no dry run and interaction is on if (!$noInteraction) { $confirmation = $this->getHelper('dialog')->askConfirmation($output, '<question>WARNING! You are about to execute a database migration that could result in data lost. Are you sure you wish to continue? (y/n)</question>', false); if (!$confirmation) { $output->writeln('<error>Migration cancelled!</error>'); return 1; } } $migration->migrate($version); }
/** * @param Symfony\Component\Console\Input\InputInterface * @param Symfony\Component\Console\Output\OutputInterface */ public function execute(InputInterface $input, OutputInterface $output) { $configuration = $this->getMigrationConfiguration($input, $output); $configMap = $configuration->getDetailsMap(); // Format current version string $currentVersion = $configMap['current_version']; if ($currentVersion) { $currentVersionFormatted = sprintf('%s (<comment>%s</comment>)', Configuration::formatVersion($currentVersion), $currentVersion); } else { $currentVersionFormatted = 0; } // Format latest version string $latestVersion = $configMap['latest_version']; if ($latestVersion) { $latestVersionFormatted = sprintf('%s (<comment>%s</comment>)', Configuration::formatVersion($latestVersion), $latestVersion); } else { $latestVersionFormatted = 0; } $output->writeln("\n <info>==</info> Configuration\n"); $numExecutedUnavailableMigrations = $configMap['num_executed_unavailable_migrations']; $numNewMigrations = $configMap['num_new_migrations']; $info = array('Name' => $configMap['name'], 'Database Driver' => $configMap['database_driver'], 'Database Name' => $configMap['migrations_database_name'], 'Configuration Source' => $configuration instanceof AbstractFileConfiguration ? $configuration->getFile() : 'manually configured', 'Version Collection Name' => $configMap['migrations_collection_name'], 'Migrations Namespace' => $configMap['migrations_namespace'], 'Migrations Directory' => $configMap['migrations_directory'], 'Current Version' => $currentVersionFormatted, 'Latest Version' => $latestVersionFormatted, 'Executed Migrations' => $configMap['num_executed_migrations'], 'Executed Unavailable Migrations' => $numExecutedUnavailableMigrations > 0 ? '<error>' . $numExecutedUnavailableMigrations . '</error>' : 0, 'Available Migrations' => $configMap['num_available_migrations'], 'New Migrations' => $numNewMigrations > 0 ? '<question>' . $numNewMigrations . '</question>' : 0); foreach ($info as $name => $value) { $this->writeInfoLine($output, $name, $value); } $showVersions = $input->getOption('show-versions') ? true : false; if ($showVersions === true) { if ($migrations = $configuration->getMigrations()) { $output->writeln("\n <info>==</info> Available Migration Versions\n"); $migratedVersions = $configuration->getMigratedVersions(); foreach ($migrations as $version) { $isMigrated = in_array($version->getVersion(), $migratedVersions); $status = $isMigrated ? '<info>migrated</info>' : '<error>not migrated</error>'; $output->writeln(' <comment>>></comment> ' . $configuration->formatVersion($version->getVersion()) . ' (<comment>' . $version->getVersion() . '</comment>)' . str_repeat(' ', 30 - strlen($name)) . $status); } } if ($executedUnavailableMigrations) { $output->writeln("\n <info>==</info> Previously Executed Unavailable Migration Versions\n"); foreach ($executedUnavailableMigrations as $executedUnavailableMigration) { $output->writeln(' <comment>>></comment> ' . $configuration->formatVersion($executedUnavailableMigration) . ' (<comment>' . $executedUnavailableMigration . '</comment>)'); } } } }