Files
2026-09-01 10:46:29 -03:00

71 lines
2.3 KiB
PHP
Executable File

<?php
namespace App\Console\Commands;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Helper\Table;
use Illuminate\Database\Capsule\Manager as Capsule;
class MigrationStatusCommand extends Command
{
protected static $defaultName = 'migrate:status';
protected static $defaultDescription = 'Mostra o status de todas as migrações';
protected function execute(InputInterface $input, OutputInterface $output): int
{
if (!Capsule::schema()->hasTable('migrations')) {
$output->writeln('<error>Tabela de migrations não encontrada.</error>');
return Command::FAILURE;
}
$migrationsPath = dirname(__DIR__, 3) . '/database/migrations';
$modulesPath = dirname(__DIR__, 3) . '/modules';
$migrationFiles = [];
// Core migrations
if (is_dir($migrationsPath)) {
$coreFiles = glob($migrationsPath . '/*.php');
if ($coreFiles) {
$migrationFiles = array_merge($migrationFiles, $coreFiles);
}
}
// Module migrations
if (is_dir($modulesPath)) {
$moduleFiles = glob($modulesPath . '/*/database/migrations/*.php');
if ($moduleFiles) {
$migrationFiles = array_merge($migrationFiles, $moduleFiles);
}
}
// Sort migration files
usort($migrationFiles, function($a, $b) {
return basename($a) <=> basename($b);
});
// Get executed migrations
$executedMigrations = Capsule::table('migrations')->get()->keyBy('migration');
$table = new Table($output);
$table->setHeaders(['Executada?', 'Migration', 'Batch']);
foreach ($migrationFiles as $file) {
$fileName = basename($file, '.php');
$executed = $executedMigrations->has($fileName);
$table->addRow([
$executed ? '<info>Sim</info>' : '<comment>Não</comment>',
$fileName,
$executed ? $executedMigrations->get($fileName)->batch : '-'
]);
}
$table->render();
return Command::SUCCESS;
}
}