Veja nesse artigo
Introdução
A migration do Laravel é uma forma de controlar criação e atualização de tabelas e registros em bancos de dados.
Imagine que você está trabalhando em uma equipe, e você está desenvolvendo uma solução.
Para isso, cria uma estrutura de três tabelas, nessa situação, sem uma forma de controle, você precisará compartilhar o script da criação, ou então dizer para os outros devs quais tabelas e colunas criou.
Com certeza esse fluxo não é bom, fica fácil de esquecer de compartilhar algo, ou compartilhar errado sem querer.
Em um cenário ainda pior, imagine que subiu o sistema para produção, porém é preciso reverter as atualizações, como reverter o banco de dados manualmente? Pode ser bem complexo e gerar mais problemas.
Para isso foi criado as migrations, com ela, a cada atualização de banco de dados é escrito em um arquivo.
Seja para criar tabelas, atualizar, criar novas colunas e etc.
Assim, todos que pegarem o código atualizado do projeto, vão ter as migrações do banco de dados, estando assim toda a equipe com o banco atualizado.
E caso necessite reverter as atualizações em produção por exemplo, é possível fazer com simples comandos.
Veja abaixo na prática como alguns comandos funcionam.
Como criar
A melhor forma é utilizar os comandos no terminal, dentro da pasta do Laravel.
E o comando para criar uma nova migração é:
php artisan make:migration create_posts_table
O Laravel vai tentar identificar qual o nome da tabela a ser criada com base no comando escrito, nesse caso irá criar a tabela posts
, porém também é possível especificar o nome da tabela dentro do arquivo.
Esse comando irá gerar um arquivo dentro de database/migrations
.
Estrutura do arquivo
O arquivo criado terá dois métodos, o up
e o down
.
No up
, é sempre onde você irá escrever as alterações que você quer fazer, por exemplo criar uma tabela, criar uma coluna, atualizar uma coluna e etc.
Já no down
você irá escrever o código que irá reverter essas alterações, exatamente para caso precise dar um rollback, o código do down
será executado.
Dentro desses dois métodos você poderá utilizar o construtor de tabelas para dizer qual o nome da tabela e quais colunas deseja.
Veja o exemplo utilizando a tabela de posts:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('description');
$table->boolean('status');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('posts');
}
};
Rodar as atualizações
Para executar as atualizações no banco de dados, também será feito via terminal com o seguinte comando:
php artisan migrate
Este comando irá ler todas as classes de migração criadas, e vai executar um por um.
É importante que os arquivos serão executados em ordem, dos que foram criados primeiro até os que foram criados por último.
Esse comando só roda novas migrações.
As migrações que já foram executadas, só podem ser rodadas novamente com outros comandos.
Reverter mudanças
É possível reverter as atualizações também com comandos no terminal.
O Laravel disponibiliza alguns comandos para ter mais controle sobre as migrações que precisam ser revertidas.
Para reverter as últimas migrações executadas, é possível fazer com o comando
php artisan migrate:rollback
Com isso, todas as últimas atualizações que foram rodadas serão revertidas.
É possível também controlar a quantidade de migrações que serão revertidas, utilizando o parâmetro step
.
Vamos supor que você queira desfazer as últimas 3 atualizações:
php artisan migrate:rollback --step=3
Agora, vamos supor que por algum motivo, será necessário reverter todas as atualizações, é possível fazer com:
php artisan migrate:reset
Conclusão
As migrations são muito utilizadas no Laravel, elas facilitam demais a manipulação das estruturas de bancos de dados.
Facilita tanto para o desenvolvimento sozinho ou em equipe.
Já é praticamente um padrão, onde é muito difícil ver um projeto Laravel sem esse recurso.
Recomendo pesquisar mais sobre o assunto, pois pode ajudar muito no dia a dia.
Para ver outros canais onde o posto conteúdo veja os Links do Programando Soluções.
Referências
https://laravel.com/docs/9.x/migrations