migrate.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * 迁移 CLI:php app/cli/migrate.php [up|status]
  5. */
  6. define('APP_ROOT', dirname(__DIR__, 2));
  7. require APP_ROOT . '/vendor/autoload.php';
  8. use Glacier\Core\Config;
  9. use Glacier\Core\Database;
  10. use Glacier\Core\Migrator;
  11. date_default_timezone_set('Asia/Shanghai');
  12. $config = require APP_ROOT . '/app/config/env.php';
  13. Config::load($config);
  14. $cmd = $argv[1] ?? 'up';
  15. try {
  16. $migrator = new Migrator(Database::pdo(), APP_ROOT . '/database');
  17. switch ($cmd) {
  18. case 'up':
  19. $executed = $migrator->up();
  20. if ($executed === []) {
  21. echo '无待执行迁移(已是最新)', PHP_EOL;
  22. } else {
  23. foreach ($executed as $name) {
  24. echo "已应用: {$name}", PHP_EOL;
  25. }
  26. }
  27. break;
  28. case 'status':
  29. foreach ($migrator->status() as $row) {
  30. printf("%-40s %s%s", $row['name'], $row['applied'] ? '已应用' : '待执行', PHP_EOL);
  31. }
  32. break;
  33. default:
  34. fwrite(STDERR, '用法: php app/cli/migrate.php [up|status]' . PHP_EOL);
  35. exit(2);
  36. }
  37. } catch (\Throwable $e) {
  38. fwrite(STDERR, '迁移失败: ' . $e->getMessage() . PHP_EOL);
  39. exit(1);
  40. }