Migrações de banco de dados em PHP: Guia completo sobre ferramentas e bibliotecas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Migrações de banco de dados em PHP: guia completo sobre ferramentas e bibliotecas



O desenvolvimento de aplicações web em PHP está intrinsecamente ligado ao gerenciamento da estrutura do banco de dados. Durante a evolução do projeto, o esquema do banco de dados muda constantemente: novas tabelas são adicionadas, campos são alterados, índices são introduzidos. A execução manual de consultas SQL em diferentes ambientes (ambiente local, staging, produção) leva a erros, perda de dados e confusão. A solução para esse problema são as migrações de banco de dados — uma forma programática de versionar e aplicar alterações no esquema.



O que são migrações e por que são necessárias?

Uma migração é uma classe PHP que contém dois métodos: up() (aplicar alterações) e down() (reverter alterações). Cada migração possui um identificador único (geralmente um timestamp) e é executada sequencialmente. As principais vantagens de usar migrações:

  • Versionamento do esquema do banco de dados — todo o histórico de alterações é armazenado no código (geralmente no Git).
  • Automação de implantação — basta executar um comando para atualizar o banco de dados em qualquer servidor.
  • Segurança — possibilidade de reverter alterações malsucedidas.
  • Trabalho em equipe — todos os desenvolvedores sincronizam a estrutura do banco de dados automaticamente.


Bibliotecas populares para migrações em PHP

Vamos analisar as três ferramentas mais comuns: Phinx, Doctrine Migrations e as integradas Laravel Migrations.



1. Phinx (robmorgan/phinx)

Phinx é uma ferramenta independente de framework para migrações e seeding (preenchimento com dados de teste). Ele suporta MySQL, PostgreSQL, SQLite, SQL Server e outros SGBDs. A instalação é feita via Composer:

composer require robmorgan/phinx

Exemplo de migração para criar a tabela de usuários:

<?phpuse Phinx\\Migration\\AbstractMigration;

class CreateUsersTable extends AbstractMigration{ public function up() { $table = $this->table('users'); $table->addColumn('username', 'string', ['limit' => 50]) ->addColumn('email', 'string') ->addColumn('password', 'string') ->addColumn('created_at', 'datetime') ->addIndex(['email'], ['unique' => true]) ->create(); }

public function down() { $this->table('users')->drop()->save(); }}

Phinx oferece um DSL (Linguagem Específica de Domínio) conveniente para descrever o esquema, além de suporte integrado para seeds (seeders). Comandos principais:

  • phinx migrate — aplicar todas as novas migrações.
  • phinx rollback — reverter a última migração.
  • phinx status — mostrar o status das migrações.
  • phinx seed:run — preencher o banco de dados com dados de teste.


2. Doctrine Migrations

Doctrine Migrations — parte do ecossistema Doctrine ORM, mas pode ser usado sem ele. Destaca-se pela poderosa integração com Doctrine DBAL (camada de abstração de banco de dados). Instalação:

composer require doctrine/migrations

Exemplo de migração usando Doctrine DBAL:

<?phpuse Doctrine\\DBAL\\Migrations\\AbstractMigration;use Doctrine\\DBAL\\Schema\\Schema;

class Version20240101000000 extends AbstractMigration{ public function up(Schema $schema) { $table = $schema->createTable('users'); $table->addColumn('id', 'integer', ['autoincrement' => true]); $table->addColumn('username', 'string', ['length' => 50]); $table->addColumn('email', 'string'); $table->setPrimaryKey(['id']); $table->addUniqueIndex(['email']); }

public function down(Sc

Recommendations