/** * Execute the Command * * @access protected * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { if (!file_exists(\Skeleton\Database\Migration\Config::$migration_directory)) { $output->writeln('<error>Config::$migration_directory is not set to a valid directory</error>'); return 1; } $output->writeln('Running migrations'); $migrations = \Skeleton\Database\Migration\Runner::get_runnable(); foreach ($migrations as $package => $package_migrations) { if (count($package_migrations) == 0) { continue; } $output->writeln("\t" . $package); foreach ($package_migrations as $package_migration) { $output->write("\t\t" . get_class($package_migration) . "\t"); try { $package_migration->run('up'); $output->writeln('<info>ok</info>'); } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); return 1; } } } $output->writeln('Database up-to-date'); return 0; }
/** * Run * * @access public * @param string up/down */ public function run($method) { $this->{$method}(); $reflection = new \ReflectionClass($this); $packages = \Skeleton\Core\Skeleton::get_all(); $filename = $reflection->getFileName(); if (substr(Config::$migration_directory, -1) == '/') { $migration_directory = substr(Config::$migration_directory, 0, -1); } else { $migration_directory = Config::$migration_directory; } if (dirname($filename) == $migration_directory) { Runner::set_version('project', $this->get_version()); return; } $migration_package = null; foreach ($packages as $package) { if (strpos($package->migration_path, dirname($filename)) === 0) { $migration_package = $package; } } if ($migration_package === null) { throw new \Exception('No package found'); } Runner::set_version($migration_package->name, $this->get_version()); }
/** * Execute the Command * * @access protected * @param InputInterface $input * @param OutputInterface $output */ protected function execute(InputInterface $input, OutputInterface $output) { if (!file_exists(\Skeleton\Database\Migration\Config::$migration_directory)) { $output->writeln('<error>Config::$migration_directory is not set to a valid directory</error>'); return 1; } $migrations = \Skeleton\Database\Migration\Runner::get_runnable(); $migration_count = 0; foreach ($migrations as $package => $package_migrations) { if (count($package_migrations) > 0) { $output->writeln('Package ' . $package . ' has outstanding migrations:'); } foreach ($package_migrations as $package_migration) { $migration_count++; if (preg_match('@\\\\([\\w]+)$@', get_class($package_migration), $matches)) { $classname = $matches[1]; } else { $classname = get_class($package_migration); } if ($package == 'project') { $output->writeln("\t" . $classname); } else { $output->writeln("\t" . $package . '/' . $classname); } } } if ($migration_count == 0) { $output->writeln('Database is up-to-date'); } return 0; }