Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

103 строки
3.0KB

  1. <?php
  2. declare(strict_types=1);
  3. require_once __DIR__ . '/../vendor/autoload.php';
  4. loadEnv(__DIR__ . '/../.env');
  5. $command = $argv[1] ?? 'help';
  6. $options = array_slice($argv, 2);
  7. $manager = migration_manager();
  8. try {
  9. switch ($command) {
  10. case 'up':
  11. $ran = $manager->runPending();
  12. if ($ran === []) {
  13. echo "No pending migrations." . PHP_EOL;
  14. exit(0);
  15. }
  16. foreach ($ran as $migration) {
  17. echo "Migrated: {$migration}" . PHP_EOL;
  18. }
  19. echo 'Applied ' . count($ran) . ' migration(s).' . PHP_EOL;
  20. exit(0);
  21. case 'down':
  22. $steps = isset($argv[2]) ? max(1, (int) $argv[2]) : 1;
  23. $rolledBack = $manager->rollback($steps);
  24. if ($rolledBack === []) {
  25. echo "No applied migrations to roll back." . PHP_EOL;
  26. exit(0);
  27. }
  28. foreach ($rolledBack as $migration) {
  29. echo "Rolled back: {$migration}" . PHP_EOL;
  30. }
  31. echo 'Rolled back ' . count($rolledBack) . ' migration(s).' . PHP_EOL;
  32. exit(0);
  33. case 'status':
  34. $status = $manager->status();
  35. if ($status === []) {
  36. echo "No migration files found." . PHP_EOL;
  37. exit(0);
  38. }
  39. foreach ($status as $row) {
  40. $state = $row['ran'] ? 'up' : 'pending';
  41. $ranAt = $row['ran_at'] ?? '-';
  42. echo str_pad($state, 10) . ' ' . $row['migration'] . ' ' . $ranAt . PHP_EOL;
  43. }
  44. exit(0);
  45. case 'make':
  46. case 'create':
  47. $name = $argv[2] ?? '';
  48. if ($name === '') {
  49. throw new InvalidArgumentException('Provide a migration name. Example: php scripts/migrate.php make create_projects_table');
  50. }
  51. $path = $manager->make($name);
  52. echo "Created migration: {$path}" . PHP_EOL;
  53. exit(0);
  54. case 'fresh':
  55. $result = $manager->fresh();
  56. foreach ($result['rolled_back'] as $migration) {
  57. echo "Rolled back: {$migration}" . PHP_EOL;
  58. }
  59. foreach ($result['migrated'] as $migration) {
  60. echo "Migrated: {$migration}" . PHP_EOL;
  61. }
  62. echo "Fresh migration run complete." . PHP_EOL;
  63. exit(0);
  64. case 'help':
  65. default:
  66. echo "Migration CLI" . PHP_EOL;
  67. echo "Usage:" . PHP_EOL;
  68. echo " php scripts/migrate.php up" . PHP_EOL;
  69. echo " php scripts/migrate.php down [steps]" . PHP_EOL;
  70. echo " php scripts/migrate.php status" . PHP_EOL;
  71. echo " php scripts/migrate.php make <name>" . PHP_EOL;
  72. echo " php scripts/migrate.php fresh [--seed]" . PHP_EOL;
  73. exit(0);
  74. }
  75. } catch (Throwable $exception) {
  76. fwrite(STDERR, $exception->getMessage() . PHP_EOL);
  77. exit(1);
  78. }

Powered by TurnKey Linux.