Capítulo 2.3: Migrações de Banco de Dados
Tempo de estudo: 50 minutos
1. Migrações: Construindo uma Estação Espacial
Migrações no Laravel são um sistema de controle de versão para o seu banco de dados.
Imagine que você está:
- 🏗️ Criando um projeto de estação (migração
create_planets_table
) - 🚀 Implantando módulos (executando migrações)
- 🔧 Modernizando a construção (novas migrações)
- ⏪ Pode reverter para uma versão anterior (rollback)
💡 Importante: As migrações permitem que a equipe trabalhe de forma consistente – como engenheiros em diferentes continentes construindo a ISS!
2. Executando Migrações
Após criar a migração no capítulo 2.2, execute:
Saída no terminal:
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (25.12ms)
Migrating: 2014_10_12_100000_create_password_reset_tokens_table
Migrated: 2014_10_12_100000_create_password_reset_tokens_table (18.07ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (21.33ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (30.45ms)
Migrating: 2025_08_04_000000_create_planets_table
Migrated: 2025_08_04_000000_create_planets_table (15.67ms) # Sua tabela!
Verificação no pgAdmin 4:
- Abra o banco de dados
space_api
→ Schemas → Tables - Certifique-se de que apareceram: -
planets
-users
-password_reset_tokens
3. Revertendo Migrações: Retorno de Emergência
Se precisar corrigir a estrutura:
php artisan migrate:fresh
— a comando mais útil no desenvolvimento! Ele remove todas as tabelas e executa novamente todas as migrações.php artisan migrate:fresh --seed
— faz o mesmo quefresh
, mas após as migrações, executa imediatamente os seeders. Este é um comando para "recriar" completamente o banco de dados do zero.
Cenário de uso:
# Passo 1: Percebemos que há um erro na migração. Recriamos completamente o banco de dados.
php artisan migrate:fresh
# Passo 2: Editamos a migração
# Passo 3: Recriamos novamente o banco de dados com a migração já corrigida
php artisan migrate:fresh
4. Adicionando Novos Campos: Modernizando a Estação
Exemplo: Adicionaremos o campo is_habitable
(se o planeta é habitável).
Passo 1: Criamos uma nova migração
Passo 2: Editamos o arquivo database/migrations/..._add_is_habitable_to_planets_table.php
<?php
public function up()
{
Schema::table('planets', function (Blueprint $table) {
$table->boolean('is_habitable')
->default(false);
});
}
public function down()
{
Schema::table('planets', function (Blueprint $table) {
$table->dropColumn('is_habitable');
});
}
Passo 3: Executamos a atualização
5. Preenchendo o Banco de Dados: Primeiros Planetas
Criamos um seeder — um script para gerar dados de teste.
Passo 1: Geração do seeder
Passo 2: Editamos database/seeders/PlanetSeeder.php
<?php
use App\Models\Planet; // Importamos o modelo do planeta - Sem ele, você receberá um erro!
class PlanetSeeder extends Seeder
{
public function run()
{
Planet::create([
'name' => 'Terra',
'description' => 'Planeta azul com vida diversa',
'size_km' => 12742,
'solar_system' => 'Sistema Solar',
'image_url' => 'https://example.com/earth.jpg',
'is_habitable' => true
]);
Planet::create([
'name' => 'Marte',
'description' => 'Planeta vermelho, alvo de futuras colonizações',
'size_km' => 6779,
'solar_system' => 'Sistema Solar',
'is_habitable' => false
]);
}
}
Passo 3: Registramos o seeder em database/seeders/DatabaseSeeder.php
Passo 4: Executando o preenchimento
6. Trabalhando com PostgreSQL: Especificidades
Características do tipo de dados:
Funcionalidade | PostgreSQL | MySQL | Comentário Laravel |
---|---|---|---|
Tipo Booleano | boolean (verdadeiro true /false ) |
tinyint(1) (armazena 0 /1 ) |
$table->boolean('...') funciona para ambos |
JSON | jsonb (binário, indexável) |
json (textual) |
$table->jsonb('...') - muito poderoso no PG |
Arrays | text[] , integer[] (arrays nativos) |
Não (emulado via JSON ou strings) | $table->array('...') (exclusivo para PG) |
Ordem das colunas | Não pode ser controlado (after() não funciona) |
Pode ser controlado (after() ) |
Laravel abstrai isso, mas é importante saber da limitação |
Exemplo de criação de índice:
7. Verificando dados no psql
Você pode usar qualquer cliente gráfico e selecionar space_api
lá para visualização.
Ao usar o console:
psql -U postgres -d space_api
# O terminal pode pedir a senha que você definiu durante a instalação do PostgreSQL.
De qualquer forma, a saída deve ser a seguinte:
id | name | description | size_km | solar_system | image_url | is_habitable |
---|---|---|---|---|---|---|
1 | Terra | Planeta azul com vida diversa | 12742 | Sistema Solar | ... | true |
2 | Marte | Planeta vermelho, alvo de colonizações | 6779 | Sistema Solar | null | false |
Quiz para fixação
🚀 Resumo do Capítulo:
Você dominou a "construção de infraestrutura espacial":
- ✅ Criou e executou migrações
- 🔧 Modernizou a estrutura da tabela
- 🌍 Preencheu o BD com os primeiros planetas
- ⚙️ Aprendeu a trabalhar com PostgreSQL
Seu universo ganhou os primeiros mundos! Agora você pode prosseguir para a criação de interfaces API para gerenciar planetas.
📌 Verificação:
- Execute
php artisan tinker
- Execute
App\Models\Planet::all()
- Certifique-se de que vê a Terra e Marte