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étodo | Funçã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ção | Método | Uso |
| Criar Tabela | Schema::create('tabela', function (Blueprint $table) {...}) | Cria uma nova tabela. |
| Excluir Tabela | Schema::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)
| Tipo | Método Blueprint | Descriçã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.
| Comando | Função |
php artisan migrate | Executa todas as migrations pendentes. |
php artisan migrate:rollback | Reverte (executa down()) o último lote de migrations. |
php artisan migrate:refresh | Reverte todas e executa todas novamente. |
php artisan migrate:fresh | Exclui todas as tabelas e executa todas as migrations novamente. (Ideal para desenvolvimento). |
php artisan migrate --force | Executa 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:
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:















