Esempio n. 1
0
 /**
  * @return MigrationList
  */
 public function loadMigrations()
 {
     $migration_dir = $this->config->get('directory');
     if (!is_dir($migration_dir)) {
         throw new RuntimeError(sprintf('Given migration path is not a directory: %s', $migration_dir));
     }
     $migration_list = new MigrationList();
     $glob_expression = sprintf('%1$s%2$s[0-9]*%2$s%3$s', $migration_dir, DIRECTORY_SEPARATOR, self::GLOB_EXPRESSION);
     foreach (glob($glob_expression) as $migration_file) {
         $class_parser = new PhpClassParser();
         $migration_class_info = $class_parser->parse($migration_file);
         $migration_class = $migration_class_info->getFullyQualifiedClassName();
         if (!class_exists($migration_class)) {
             require_once $migration_class_info->getFilePath();
         }
         if (!class_exists($migration_class)) {
             throw new RuntimeError(sprintf("Unable to load migration class %s", $migration_class));
         }
         $class_name_parts = explode('_', $migration_class_info->getClassName());
         $name = $class_name_parts[2] . (isset($class_name_parts[3]) ? $class_name_parts[3] : '');
         $version = $class_name_parts[1];
         $migration = $this->injector->make($migration_class, [':state' => ['name' => StringToolkit::asSnakeCase($name), 'version' => $version]]);
         $migration_list->addItem($migration);
     }
     return $migration_list;
 }
Esempio n. 2
0
 public function migrate($target_name = null, $target_version = null)
 {
     $executed_migrations = new MigrationList();
     $direction = $this->getDirection($target_name, $target_version);
     if (!$direction) {
         return $executed_migrations;
     }
     $target_version = is_null($target_version) ? $this->getDefaultTargetVersion($target_name, $direction) : $target_version;
     if ($direction === MigrationInterface::MIGRATE_UP) {
         $migrations = $this->getPendingMigrations($target_name, $target_version);
     } else {
         $migrations = $this->getExecutedMigrations($target_name, $target_version);
     }
     foreach ($migrations as $migration) {
         $migration->migrate($this->getMigrationTarget($target_name), $direction);
         $executed_migrations->push($migration);
     }
     return $executed_migrations;
 }