Neos\Flow\Persistence\Doctrine\Service::getMigrationStatus PHP Метод

getMigrationStatus() публичный Метод

Returns the current migration status formatted as plain text.
public getMigrationStatus ( boolean $showMigrations = false, boolean $showDescriptions = false ) : string
$showMigrations boolean
$showDescriptions boolean
Результат string
    public function getMigrationStatus($showMigrations = false, $showDescriptions = false)
    {
        $configuration = $this->getMigrationConfiguration();
        $executedMigrations = $configuration->getMigratedVersions();
        $availableMigrations = $configuration->getAvailableVersions();
        $executedUnavailableMigrations = array_diff($executedMigrations, $availableMigrations);
        $numExecutedUnavailableMigrations = count($executedUnavailableMigrations);
        $numNewMigrations = count(array_diff($availableMigrations, $executedMigrations));
        $statusInformation = ['Name' => $configuration->getName() ? $configuration->getName() : 'Doctrine Database Migrations', 'Database Driver' => $configuration->getConnection()->getDriver()->getName(), 'Database Name' => $configuration->getConnection()->getDatabase(), 'Configuration Source' => 'manually configured', 'Version Table Name' => $configuration->getMigrationsTableName(), 'Version Column Name' => $configuration->getMigrationsColumnName(), 'Migrations Namespace' => $configuration->getMigrationsNamespace(), 'Migrations Target Directory' => $configuration->getMigrationsDirectory(), 'Previous Version' => $this->getFormattedVersionAlias('prev', $configuration), 'Current Version' => $this->getFormattedVersionAlias('current', $configuration), 'Next Version' => $this->getFormattedVersionAlias('next', $configuration), 'Latest Version' => $this->getFormattedVersionAlias('latest', $configuration), 'Executed Migrations' => count($executedMigrations), 'Executed Unavailable Migrations' => $numExecutedUnavailableMigrations, 'Available Migrations' => count($availableMigrations), 'New Migrations' => $numNewMigrations];
        $output = PHP_EOL . '<info>==</info> Configuration' . PHP_EOL;
        foreach ($statusInformation as $name => $value) {
            if ($name == 'New Migrations') {
                $value = $value > 0 ? '<question>' . $value . '</question>' : 0;
            }
            if ($name == 'Executed Unavailable Migrations') {
                $value = $value > 0 ? '<error>' . $value . '</error>' : 0;
            }
            $output .= '   <comment>></comment> ' . $name . ': ' . str_repeat(' ', 35 - strlen($name)) . $value . PHP_EOL;
        }
        if ($showMigrations) {
            if ($migrations = $configuration->getMigrations()) {
                $docCommentParser = new DocCommentParser();
                $output .= PHP_EOL . ' <info>==</info> Available Migration Versions' . PHP_EOL;
                /** @var Version $version */
                foreach ($migrations as $version) {
                    $packageKey = $this->getPackageKeyFromMigrationVersion($version);
                    $croppedPackageKey = strlen($packageKey) < 30 ? $packageKey : substr($packageKey, 0, 29) . '~';
                    $packageKeyColumn = ' ' . str_pad($croppedPackageKey, 30, ' ');
                    $isMigrated = in_array($version->getVersion(), $executedMigrations);
                    $status = $isMigrated ? '<info>migrated</info>' : '<error>not migrated</error>';
                    $migrationDescription = '';
                    if ($showDescriptions) {
                        $migrationDescription = str_repeat(' ', 2) . $this->getMigrationDescription($version, $docCommentParser);
                    }
                    $formattedVersion = $configuration->getDateTime($version->getVersion());
                    $output .= '    <comment>></comment> ' . $formattedVersion . ' (<comment>' . $version->getVersion() . '</comment>)' . $packageKeyColumn . str_repeat(' ', 2) . $status . $migrationDescription . PHP_EOL;
                }
            }
            if (count($executedUnavailableMigrations)) {
                $output .= PHP_EOL . ' <info>==</info> Previously Executed Unavailable Migration Versions' . PHP_EOL;
                foreach ($executedUnavailableMigrations as $executedUnavailableMigration) {
                    $output .= '    <comment>></comment> ' . $configuration->getDateTime($executedUnavailableMigration) . ' (<comment>' . $executedUnavailableMigration . '</comment>)' . PHP_EOL;
                }
            }
        }
        return $output;
    }

Usage Example

Пример #1
0
 /**
  * Show the current migration status
  *
  * Displays the migration configuration as well as the number of
  * available, executed and pending migrations.
  *
  * @param boolean $showMigrations Output a list of all migrations and their status
  * @param boolean $showDescriptions Show descriptions for the migrations (enables versions display)
  * @return void
  * @see neos.flow:doctrine:migrate
  * @see neos.flow:doctrine:migrationexecute
  * @see neos.flow:doctrine:migrationgenerate
  * @see neos.flow:doctrine:migrationversion
  */
 public function migrationStatusCommand($showMigrations = false, $showDescriptions = false)
 {
     if (!$this->isDatabaseConfigured()) {
         $this->outputLine('Doctrine migration status not available, the driver and host backend options are not set in /Configuration/Settings.yaml.');
         $this->quit(1);
     }
     if ($showDescriptions) {
         $showMigrations = true;
     }
     $this->outputLine($this->doctrineService->getMigrationStatus($showMigrations, $showDescriptions));
 }