A maioria, se não todos, os frameworks php full stack atuais têm um recurso chamado migrations (se você não sabe o que são migrações, veja este ótimo artigo de FF-OnlineTech. Usando Migrações no CakePHP 3), mas digamos que você está trabalhando em um projeto legado que não usa nenhum framework e precisa de uma forma organizada e automatizada para controlar as mudanças em seu banco de dados, nesse caso o Phinx (https://phinx.org/) pode ajudar. O phinx é uma ferramenta para escrever e executar migrações e é usado até mesmo pelo plugin de migração do framework CakePHP.
Para instalá-lo vamos usar o composer, execute o seguinte comando no composer:
Migrations php
Basicamente, consiste em manter o controle de versão do banco de dados da aplicação e manipulá-lo através de código, podendo compartilhar todo o seu histórico de alterações.
Isso facilita a vida de qualquer equipe de desenvolvimento, pois pode alterar a arquitetura da aplicação executando o código responsável por ela, que também é versionado e compartilhado com o restante do projeto.
Php inx
É um componente (palavra da própria biblioteca) que facilita muito o gerenciamento de migrações, então vamos usá-lo.
Existem várias opções de bibliotecas com a mesma finalidade, geralmente o framework já carrega um componente para esta finalidade. Por exemplo: Phinx é um projeto de Rob Morgan e está até “incorporado” no framework CakePHP por padrão.
Instalando e inicializando o Phinx composer require robmorgan/phinx
Configurações de php
Em primeiro lugar, execute o comando abaixo:
vendor\bin\phinx init
Um arquivo .yml será criado no diretório raiz do projeto onde você deve definir o diretório onde serão geradas as migrações e as credenciais de acesso ao banco de dados.
Defina o diretório de migração na linha 2 do arquivo phinx.yml:
Tenha em mente que esses dados são dados de amostra e você deve notificar as credenciais de acesso de acordo com a configuração do seu projeto.
Phinx fornece três “ambientes” de execução, a saber: Produção, Desenvolvimento e Teste. Você pode definir qual usar na linha 7 do arquivo phinx.yml usando o sinalizador default_database.
Criando uma migration
vendor\bin\phinx create CreateTasksTable
O comando acima criará um arquivo no diretório db/migrations com a estrutura básica das migrações. Como o nome da migração sugere, escreveremos o código responsável por criar a tabela de tarefas e definir suas propriedades.
Para isso, iremos alterar o método change() com o seguinte conteúdo:
Na linha 1, definimos o nome da tabela. Na linha 2, adicionamos a coluna de descrição e, na linha 5, chamamos o método create(), responsável por fazer as alterações reais no esquema.
Executando
vendor\bin\phinx migrate
No console você deve obter o seguinte resultado:
e sucesso! Veja como as alterações são realmente feitas no banco de dados:
Caso de uso
Desenvolvimento local:
Sempre que houver alguma mudança na arquitetura do projeto, a equipe precisa buscar as migrações (controle de versão junto com o restante do código), e os desenvolvedores apenas executam o comando vendor\bin\phinx migrate e todas as mudanças são entregues ao seu base local, você não sabe? ?
Deploy:
Uma prática bastante utilizada durante a implantação de aplicativos é definir a execução das migrações em um pipeline, o que mantém o esquema de produção sempre atualizado sem precisar acessar manualmente o banco de dados.
Observações
Observe que o campo id é criado automaticamente pelo Phinx, não precisei informar isso no código de migração.
Além da possibilidade de executar consultas, inserir dados e até executar SQL se necessário, existem várias formas de manipular esquemas para criar e renomear tabelas e colunas, definir chaves estrangeiras, etc.
Eu recomendo que você visite a documentação oficial do Phinx para descobrir todos os usos possíveis e entender os tópicos avançados deste incrível componente.
Rollback php
Você pode reverter as alterações no esquema executando:
vendor\bin\phinx rollback
Conclusão
Sem dúvida, o uso de migrações facilita a manutenção de bancos de dados em projetos de software, somando-se ao poder de controle de versão e compartilhamento de código que já são onipresentes em nosso dia a dia.
Espero muito que este conteúdo seja útil para o seu estudo até a próxima!