Crie seu próprio sistema de migrations em PHP! Parte 1
Tags: php, migrations, programacao, portugues
Published: 2020-07-21 10:47:59

Ao som de [Elvis Presley — Baby, what you want me to do](https://open.spotify.com/album/1vaQwUom5fWnLNJDcabU01?si=vmS_7xK3Rcqax06S7SycIw). gostaria de compartilhar com vocês uma experiência recente que tive.

Para os que programam em PHP, muito dificilmente não conhecem o [Framework Laravel](https://laravel.com). É um dos mais conhecidos, senão usados atualmente. E a algum tempo atrás quando me aventurei a aprender o Laravel já na sua versão 4, me deparei com uma ferramenta incrível: **As migrations** ❤!

### O que são e como funcionam as migrations

Digamos que o sistema de migrations é um sistema criado para auxiliar os desenvolvedores a migrarem seus bancos de dados, contribuir com o desenvolvimento e a parte de infra de um projeto. Deixe que eu demonstre melhor. Digamos que comecei a desenvolver meu site e que possuo uma tabela chamada usuarios e que esta tabela possui os campos: *id, primeiro_nome, email e senha*. Uma estrutura mais simples impossível!

Ok! A nossa tabela está rodando em produção, em 10 sites diferentes, e cada um possui em média 1.000 clientes cadastrados. *Porém*, ai vem o problema, o chefe nos chama no escritório e diz que precisa agora capturar também o telefone dos clientes. E, além do mais, que ao invés de ser capturado somente o primeiro nome seja capturado o nome completo. Bem, você poderia simplesmente ir a cada um dos bancos e alterar manualmente cada uma das tabelas.

![Magic!](https://miro.medium.com/max/218/0*DDfK5mqtCQR1Z8Nw.gif)

### A magia das migrations

Se fosse só isso, ter todo esse trabalho para alterar as tabelas, não seria necessário escrever esta publicação. Bastaria que fizéssemos as alterações e tudo ótimo. Mas esse não é o nosso objetivo. O nosso objetivo é conseguir entregar um trabalho bem feito, utilizando os recursos que estão ao nosso alcance.

Suponhamos que ao invés de alterar banco por banco, tabela por tabela, você decida aprender a utilizar as migrations e poupar tempo e trabalho desnecessário. Mais a cima eu citei o Laravel, mas não é exclusividade do mesmo. As migrations estão presente em diversas aplicações. Um exemplo seria o [Adonis JS](https://adonisjs.com/), uma aplicação em NodeJs gostosinha de mexer.

Bem, chega de enrolação. Você cria uma migration, no caso do Laravel:

```console
php artisan make:migration add_columns_to_usuarios
```

E dentro do arquivo cria todo o conteúdo responsável por alterar e criar as colunas. No fim, basta rodar no servidor de produção:

```console
php artisan migrate
```

E o Laravel fará todo o trabalho por você! ;D Molezinha, não?!

Uma semana depois volta seu chefe e diz que recalcularam e realmente só precisam capturar o primeiro nome e não precisam mais do telefone. Maravilha! Com as migrations você só precisa rodar o seguinte comando para desfazer as últimas alterações na estrutura do banco:

```console
php artisan migrate:rollback --step=1
```

---

Tudo muito bem, tudo muito bom, mas e se eu não tiver utilizando o Laravel, ou o Adonis…? Bem, você vai precisar baixar uma biblioteca ou criar um próprio sistema caso não ache uma para a sua linguagem (o que acho difícil).

Para o PHP, por exemplo, me deparei com o [phinx](https://github.com/cakephp/phinx) do [CakePHP](https://cakephp.org/), ou essa [PHPDbMigration](https://github.com/alwex/php-database-migration). Todas as duas disponíveis no Github ;)

Esse post vai ficar muito longo para explicar como criar o seu próprio sistema em PHP, mas vou continuar no próximo. 
Acompanhe!


*Imagem: [fotografielink pixabay](https://pixabay.com/pt/users/fotografielink-6316043/)*