addArgument('table', InputArgument::REQUIRED, 'O nome da tabela')
->addOption('format', 'f', InputOption::VALUE_OPTIONAL, 'O formato do arquivo (csv, json)', 'csv')
->addOption('path', 'p', InputOption::VALUE_OPTIONAL, 'O caminho para salvar o arquivo', 'storage/exports');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$tableName = $input->getArgument('table');
$format = strtolower($input->getOption('format'));
$path = $input->getOption('path');
$connection = Capsule::connection();
$dbName = $connection->getDatabaseName();
if (!Capsule::schema()->hasTable($tableName)) {
$output->writeln("Tabela '{$tableName}' não encontrada no banco de dados.");
return Command::FAILURE;
}
$results = $connection->table($tableName)->get();
if ($results->isEmpty()) {
$output->writeln("A tabela '{$tableName}' está vazia.");
return Command::SUCCESS;
}
$output->writeln("Exportando dados da tabela: {$tableName}");
$directory = dirname(__DIR__, 3) . '/' . ltrim($path, '/');
if (!is_dir($directory)) {
mkdir($directory, 0755, true);
}
$filename = "{$tableName}_" . date('Y-m-d_H-i-s') . ".{$format}";
$fullPath = rtrim($directory, '/') . '/' . $filename;
if ($format === 'json') {
file_put_contents($fullPath, json_encode($results, JSON_PRETTY_PRINT));
} elseif ($format === 'csv') {
$fp = fopen($fullPath, 'w');
// Adiciona o cabeçalho
$headers = array_keys((array) $results[0]);
fputcsv($fp, $headers);
foreach ($results as $row) {
fputcsv($fp, (array) $row);
}
fclose($fp);
} else {
$output->writeln("Formato '{$format}' não suportado.");
return Command::FAILURE;
}
$output->writeln("Dados exportados com sucesso para: {$fullPath}");
return Command::SUCCESS;
}
}