addArgument('class', InputArgument::OPTIONAL, 'O nome da classe seeder específica para rodar');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$className = $input->getArgument('class');
$seedersPath = dirname(__DIR__, 3) . '/database/seeders';
if (!is_dir($seedersPath)) {
$output->writeln('Diretório de seeders não encontrado.');
return Command::FAILURE;
}
if ($className) {
return $this->runSeeder($className, $seedersPath, $output);
}
// Se não especificou classe, tenta rodar o DatabaseSeeder ou todos os arquivos .php
$dbSeederFile = $seedersPath . '/DatabaseSeeder.php';
if (file_exists($dbSeederFile)) {
return $this->runSeeder('DatabaseSeeder', $seedersPath, $output);
}
$files = glob($seedersPath . '/*.php');
if (empty($files)) {
$output->writeln('Nenhum seeder encontrado.');
return Command::SUCCESS;
}
foreach ($files as $file) {
$name = basename($file, '.php');
if ($name === 'DatabaseSeeder') continue; // Já rodamos se existisse
$this->runSeeder($name, $seedersPath, $output);
}
return Command::SUCCESS;
}
protected function runSeeder(string $name, string $path, OutputInterface $output): int
{
$file = $path . '/' . $name . '.php';
if (!file_exists($file)) {
$output->writeln("Seeder não encontrado: {$name}");
return Command::FAILURE;
}
$output->write("Rodando seeder: {$name}... ");
try {
require_once $file;
if (class_exists($name)) {
$seeder = new $name();
if (method_exists($seeder, 'run')) {
$seeder->run();
$output->writeln('OK');
return Command::SUCCESS;
} else {
$output->writeln('Método run() não encontrado.');
return Command::FAILURE;
}
} else {
$output->writeln("Classe {$name} não encontrada no arquivo.");
return Command::FAILURE;
}
} catch (\Exception $e) {
$output->writeln("FALHA");
$output->writeln("Erro: " . $e->getMessage() . "");
return Command::FAILURE;
}
}
}