<?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); } }