catchAdmin/extend/catcher/command/MigrateRunCommand.php
2020-01-21 17:00:17 +08:00

67 lines
2.0 KiB
PHP

<?php
namespace catcher\command;
use catcher\CatchAdmin;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option as InputOption;
use think\console\Output;
use think\migration\command\migrate\Run;
class MigrateRunCommand extends Run
{
protected $module;
public function configure()
{
$this->setName('catch-migrate:run')
->setDescription('Migrate the database')
->addArgument('module', Argument::REQUIRED, 'migrate the module database')
->addOption('--target', '-t', InputOption::VALUE_REQUIRED, 'The version number to migrate to')
->addOption('--date', '-d', InputOption::VALUE_REQUIRED, 'The date to migrate to')
->setHelp(<<<EOT
The <info>migrate:run</info> command runs all available migrations, optionally up to a specific version
<info>php think catch-migrate:run module</info>
<info>php think catch-migrate:run module -t 20110103081132</info>
<info>php think catch-migrate:run module -d 20110103</info>
<info>php think catch-migrate:run -v</info>
EOT
);
}
protected function execute(Input $input, Output $output)
{
$this->module = strtolower($input->getArgument('module'));
$version = $input->getOption('target');
$date = $input->getOption('date');
// run the migrations
$start = microtime(true);
if (null !== $date) {
$this->migrateToDateTime(new \DateTime($date));
} else {
$this->migrate($version);
}
$end = microtime(true);
// 重置 migrations 在循环冲无法重复使用
$this->migrations = null;
$output->writeln('');
$output->writeln('<comment>All Done. Took ' . sprintf('%.4fs', $end - $start) . '</comment>');
}
/**
* 获取 migration path
*
* @time 2019年12月03日
* @param $module
* @return string
*/
protected function getPath()
{
return CatchAdmin::moduleMigrationsDirectory($this->module);
}
}