Laravel Migrations

Laravel
Tempo de leitura: 4 minutos

As Laravel Migrations atuam como um sistema de controle de versão para o esquema do seu banco de dados, permitindo que você defina, modifique e compartilhe a estrutura de dados da aplicação de maneira organizada e consistente. Elas garantem que todos os membros da equipe e ambientes de implantação estejam sempre com a mesma estrutura de banco de dados.

Este artigo detalha o ciclo de vida das migrations, desde a geração dos arquivos até a execução de alterações no esquema.

1. 🏗️ Gerando e Estruturando Migrations

Uma migration é uma classe que define as alterações no esquema (up()) e como revertê-las (down()).

A. Geração

Use o Artisan para criar o arquivo, especificando a intenção da migration com as flags --create ou --table:

Bash

# Para criar uma nova tabela (cria o método Schema::create automaticamente)
php artisan make:migration create_posts_table --create=posts

# Para modificar uma tabela existente (cria o método Schema::table automaticamente)
php artisan make:migration add_user_id_to_posts_table --table=posts

O arquivo gerado é colocado em database/migrations com um timestamp para garantir a ordem de execução.

B. Métodos Principais

Cada arquivo de migration contém dois métodos:

MétodoFunção
up()Executa as alterações no banco de dados (criação, modificação, adição de colunas).
down()Reverte as alterações feitas em up() (exclui a tabela, remove a coluna adicionada).

PHP

// Exemplo de Estrutura
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('users');
    }
};

2. 🗄️ Manipulação de Tabelas e Colunas

O Laravel utiliza a Facade Schema e o objeto Blueprint para interagir com o esquema do banco de dados de forma agnóstica (sem escrever SQL específico).

A. Criando e Excluindo Tabelas

AçãoMétodoUso
Criar TabelaSchema::create('tabela', function (Blueprint $table) {...})Cria uma nova tabela.
Excluir TabelaSchema::dropIfExists('tabela')Exclui a tabela se ela existir.

B. Modificando Tabelas (Schema::table)

Use Schema::table() para adicionar, modificar ou remover colunas de uma tabela existente.

PHP

// Migration: add_is_published_to_posts_table
public function up(): void
{
    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('is_published')->default(false)->after('content');
    });
}

public function down(): void
{
    Schema::table('posts', function (Blueprint $table) {
        // Para reverter, use dropColumn
        $table->dropColumn('is_published'); 
    });
}

C. Definição de Colunas (Blueprint)

TipoMétodo BlueprintDescrição
ID$table->id()BIGINT (unsigned, auto-increment, PK).
String$table->string('coluna', 255)VARCHAR.
Texto$table->text('coluna')Coluna TEXT (maior que VARCHAR).
Números$table->integer('coluna'), $table->bigInteger('coluna')INT e BIGINT.
Decimal$table->decimal('price', 8, 2)Ponto flutuante com precisão.
Datas$table->timestamps()Cria created_at e updated_at.
Soft Delete$table->softDeletes()Adiciona deleted_at para exclusão suave.

D. Chaves Estrangeiras e Índices

Índices e Chaves Estrangeiras são cruciais para performance e integridade:

PHP

Schema::table('products', function (Blueprint $table) {
    // Chave Estrangeira (FK)
    $table->unsignedBigInteger('category_id'); 
    $table->foreign('category_id') 
          ->references('id')->on('categories')
          ->onDelete('cascade'); // Ação em cascata (opcional)

    // Índices
    $table->unique('email'); // Garante que e-mail é único
    $table->index('name');   // Melhora a busca pelo nome
});

3. 🏃 Execução e Reversão de Migrations

O Artisan fornece comandos essenciais para gerenciar o estado do banco de dados.

ComandoFunção
php artisan migrateExecuta todas as migrations pendentes.
php artisan migrate:rollbackReverte (executa down()) o último lote de migrations.
php artisan migrate:refreshReverte todas e executa todas novamente.
php artisan migrate:freshExclui todas as tabelas e executa todas as migrations novamente. (Ideal para desenvolvimento).
php artisan migrate --forceExecuta migrations em ambiente de produção (ignora o prompt de confirmação).

4. 🔗 Exemplo: Tabela com Relacionamento (FK)

PHP

// Cria a tabela de relacionamento (neste caso, a categoria)
Schema::create('categories', function (Blueprint $table) {
    $table->id();
    $table->string('name')->unique();
    $table->timestamps();
});

// Cria a tabela com a chave estrangeira
Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->decimal('price', 8, 2);
    
    // 1. Definição da coluna FK
    $table->unsignedBigInteger('category_id'); 
    
    // 2. Definição da restrição de chave estrangeira
    $table->foreign('category_id')
          ->references('id')
          ->on('categories')
          ->onDelete('restrict');
    
    $table->timestamps();
});

// No down(), a ordem de exclusão é importante (dependente -> pai)
public function down(): void
{
    Schema::dropIfExists('products'); // Primeiro, a tabela que tem a FK
    Schema::dropIfExists('categories'); // Depois, a tabela referenciada
}

✅ Conclusão Laravel Migrations

Laravel Migrations: As migrations são o fundamento para gerenciar o esquema do banco de dados de forma profissional e segura. Elas permitem que você evolua a estrutura de dados de sua aplicação de maneira reversível e rastreável, facilitando o desenvolvimento em equipe e a implantação em diferentes ambientes. Dominar os comandos migrate, rollback e o uso da Facade Schema é indispensável para qualquer desenvolvedor Laravel.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.