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