addOption('step', 's', InputOption::VALUE_OPTIONAL, 'The number of migrations to be reverted', 0) ->addOption('seed', null, InputOption::VALUE_NONE, 'Indicates if the seed command should be re-run'); } protected function execute(InputInterface $input, OutputInterface $output): int { $step = (int) $input->getOption('step'); if ($step > 0) { $output->writeln("Revertendo {$step} passos de migração..."); $rollbackCommand = $this->getApplication()->find('migrate:rollback'); $rollbackInput = new ArrayInput(['--step' => $step]); $rollbackCommand->run($rollbackInput, $output); } else { $output->writeln('Revertendo todas as migrações (reset)...'); // Reset all by calling rollback in loop or a specific reset command // Assuming we'll use rollback in loop for simplicity or adding a reset later // Here we use step=999 as a convention for "all" in our rollback implementation $rollbackCommand = $this->getApplication()->find('migrate:rollback'); $rollbackInput = new ArrayInput(['--step' => 999]); $rollbackCommand->run($rollbackInput, $output); } $output->writeln('Executando migrações novamente...'); $migrateCommand = $this->getApplication()->find('migrate'); $migrateInput = new ArrayInput([]); $migrateCommand->run($migrateInput, $output); if ($input->getOption('seed')) { $output->writeln('Executando seeders...'); $seedCommand = $this->getApplication()->find('db:seed'); $seedInput = new ArrayInput([]); $seedCommand->run($seedInput, $output); } $output->writeln('Operação migrate:refresh concluída com sucesso!'); return Command::SUCCESS; } }