shrrgnien/sequencial-migrations

Pacote para rodar migrations customizadas de forma sequencial no Laravel.

v1.1.0 2025-08-17 20:50 UTC

This package is auto-updated.

Last update: 2025-08-18 01:23:00 UTC


README

Pacote Laravel para rodar migrations customizadas de forma sequencial (em ordem definida).

Vantagens

  • Exibe cenários de erro de forma mais amigável: ao invés de quebrar toda a sequência de migrations, permite identificar e tratar apenas a migration problemática, sem interromper o restante.

  • Permite reajustar rapidamente a sequência: se uma migration falhar, é fácil corrigir e continuar de onde parou, sem precisar reverter tudo.

  • Evita erros comuns de deploy: ao garantir a ordem e pular migrations já aplicadas, reduz riscos de inconsistências em ambientes diferentes.

  • Facilita o trabalho com bancos de dados legados: muitos bancos legados foram criados sem migrations. Com este pacote, é possível rodar migrations específicas para alterar ou preparar o banco legado antes de migrá-lo, sem precisar executar todas as migrations novamente.

  • Útil em cenários com múltiplos bancos: permite rodar apenas migrations pontuais em bancos legados, sem afetar o banco novo ou o restante do sistema.

  • Ideal para transição de bancos legados para novos: possibilita migrar tabelas antigas para o padrão Laravel de forma controlada e incremental, aplicando partes do schema novo sem afetar o legado, tornando a migração mais segura e previsível.

  • Permite definir uma lista de migrations customizadas (nomeadas ou anônimas) para serem executadas em ordem específica.

  • Suporta tanto migrations padrão do Laravel quanto arquivos de migration anônimos.

  • Executa o método up() de cada migration, pulando automaticamente migrations já aplicadas (baseado na existência da tabela).

  • Executa o método down() de cada migration, revertendo na ordem inversa e pulando migrations já revertidas.

  • Registra e remove as migrations na tabela padrão migrations do Laravel, mantendo o histórico/batch.

  • Detecta automaticamente o nome da tabela criada/removida pela migration (por propriedade, método ou parsing do método up).

  • Comando Artisan migrate:base para rodar todas as migrations customizadas em ordem, com suporte a up e down.

  • Não requer registro manual do Service Provider graças ao Laravel Package Discovery.

Instalação

composer require shrrgnien/sequencial-migrations

Publicando o arquivo BaseMigration

Após instalar, publique o arquivo base para definir suas migrations:

php artisan vendor:publish --tag=sequencial-migrations-base

Isso irá criar o arquivo database/migrations/BaseMigration.php no seu projeto. Edite esse arquivo para definir a ordem das suas migrations.

Uso

Importando migrations automaticamente para o BaseMigration

Você pode popular o array $migrations do arquivo database/migrations/BaseMigration.php automaticamente com as migrations do seu projeto usando o comando Artisan:

php artisan migrate:import-base all

Opções disponíveis:

  • all: importa todas as migrations (nomeadas e anônimas) encontradas na pasta database/migrations (exceto o próprio BaseMigration.php), sem duplicidade.
  • pending: importa apenas as migrations que ainda não foram executadas (pendentes).
  • executed: importa apenas as migrations já executadas (presentes na tabela migrations).

Exemplos:

Importar todas as migrations:

php artisan migrate:import-base all

Importar apenas as pendentes:

php artisan migrate:import-base pending

Importar apenas as já executadas:

php artisan migrate:import-base executed

O comando irá atualizar automaticamente o array $migrations do arquivo BaseMigration.php.

  1. Edite manualmente ou utilize o comando acima para popular a propriedade $migrations em database/migrations/BaseMigration.php.

    • Você pode misturar migrations nomeadas (classes) e migrations anônimas (arquivos que retornam um objeto Migration).
    • Exemplo:
      protected array $migrations = [
         	 // Migration nomeada (classe PHP)
         	 'CreateProdutosTable',
         	 // Migration anônima (arquivo migration)
         	 '2025_08_11_135652_create_sis_solicitacoes_table',
      ];
    • Para migrations nomeadas, use apenas o nome da classe (sem namespace).
    • Para migrations anônimas, use o nome do arquivo (sem extensão .php).
  2. Coloque suas migrations customizadas na pasta padrão do Laravel

    • Os arquivos devem estar em database/migrations do seu projeto Laravel.
  3. Execute as migrations em ordem

    • Use o comando Artisan:
      php artisan migrate:base
    • Para reverter (down), use:
      php artisan migrate:base down

Exemplo de migration nomeada

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProdutosTable extends Migration
{
	public function up()
	{
		Schema::create('produtos', function (Blueprint $table) {
			$table->id();
			$table->string('nome');
			$table->timestamps();
		});
	}

	public function down()
	{
		Schema::dropIfExists('produtos');
	}
}

Depois, adicione 'CreateProdutosTable' no array $migrations da sua BaseMigration.

Licença

MIT