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: ferramentas modernas e práticas



Migrações de banco de dados são uma parte essencial do desenvolvimento moderno em PHP. Elas permitem que equipes de desenvolvedores sincronizem alterações no esquema do banco de dados, acompanhem o histórico de alterações e as apliquem automaticamente em diferentes ambientes (ambiente local, staging, produção). Neste artigo, veremos as principais bibliotecas e ferramentas para migrações em PHP, sua instalação, configuração e exemplos de uso.



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



Uma migração de banco de dados é um script que descreve uma alteração no esquema: criação de tabela, adição/remoção de colunas, índices, chaves estrangeiras. As migrações permitem:

  • Versionar as alterações na estrutura do BD junto com o código da aplicação.
  • Automatizar a implantação em novos servidores.
  • Reverter alterações quando necessário.
  • Trabalhar em equipe sem conflitos.


Bibliotecas populares para migrações em PHP



1. Phinx (robmorgan/phinx)

Phinx é uma das bibliotecas independentes mais populares para migrações. Ela não está vinculada a um framework específico e suporta MySQL, PostgreSQL, SQLite, SQL Server.



Instalação via Composer:

composer require robmorgan/phinx


Criação do arquivo de configuração phinx.yml:

paths:    migrations: '%%PHINX_CONFIG_DIR%%/db/migrations'    seeds: '%%PHINX_CONFIG_DIR%%/db/seeds'

environments: default_migration_table: phinxlog default_database: development development: adapter: mysql host: localhost name: myapp_db user: root pass: '' port: 3306 charset: utf8


Exemplo de migração (criação da tabela users):

<?php

use Phinx\\Migration\\AbstractMigration;

class CreateUsersTable extends AbstractMigration{ public function change() { $table = $this->table('users', ['id' => false, 'primary_key' => ['id']]); $table->addColumn('id', 'biginteger', ['identity' => true]) ->addColumn('username', 'string', ['limit' => 50]) ->addColumn('email', 'string', ['limit' => 100]) ->addColumn('created_at', 'datetime') ->addColumn('updated_at', 'datetime', ['null' => true]) ->addIndex(['email'], ['unique' => true]) ->create(); }}


Executando migrações:

vendor/bin/phinx migrate -e development


2. Doctrine Migrations (doctrine/migrations)

Doctrine Migrations faz parte do ecossistema Doctrine ORM. É ideal para projetos que já utilizam Doctrine. Suporta todos os SGBDs populares.



Instalação:

composer require doctrine/migrations


Configuração (migrations.php):

<?phpreturn [    'table_storage' => [        'table_name' => 'doctrine_migration_versions',    ],    'migrations_paths' => [        'App\\Migrations' => './migrations',    ],    'all_or_nothing' => true,    'transactional' => true,    'check_database_platform' => true,];


Exemplo de migração:

<?php

namespace App\\Migrations;

use Doctrine\\DBAL\\Schema\\Schema;use Doctrine\\Migrations\\AbstractMigration;

class Version20240101000000 extends AbstractMigration{ public function up(Schema $schema): void { $table = $schema->createTable('products'); $table->addColumn('id', 'integer', ['autoincrement' => true]); $table->addColumn('name', 'string', ['length' => 255]); $table->addColumn('price', 'decimal', ['precision' => 10, 'scale' => 2]); $table->se

Recommendations