Skip to content

Capítulo 2.2: Criando o Modelo Planet

Tempo de estudo: 45 minutos


1. O Modelo no Laravel: Planta de um Objeto Espacial

Na arquitetura MVC (Model-View-Controller), o modelo é:

  • 📦 Um contêiner para dados (parâmetros de planetas)
  • 🔌 Uma interface para interagir com o banco de dados
  • 🛡️ O centro da lógica de negócios da aplicação

💡 Analogia Espacial: O modelo Planet = A planta de um planeta no computador do Centro de Controle da Missão (CCM). Com ele, você pode:

  • Criar um novo planeta no catálogo (INSERT)
  • Obter dados sobre Marte (SELECT)
  • Atualizar informações sobre a atmosfera (UPDATE)

2. Criando o Modelo e a Migração

Laravel usa o Artisan CLI — seu "painel de controle" do projeto.

Passo 1: Gerando o modelo com a migração

php artisan make:model Planet -m

O que foi criado:

app/
  └── Models/
      └── Planet.php    ← Modelo
database/
  └── migrations/
      └── 2025_08_04_000000_create_planets_table.php  ← Migração

Flags do Artisan:

  • -m → Criar uma migração
  • -c → Criar um controller
  • -r → Um controller de recursos

💡 Dica Profissional: Essas flags podem ser combinadas para máxima eficiência. O comando php artisan make:model Planet -mcr criará imediatamente o modelo, a migração e um controller de recursos para gerenciar esse modelo. Isso economiza muito tempo.


3. Configurando o Modelo Planet

Abra app/Models/Planet.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Planet extends Model
{
    // Nome da tabela (por padrão: 'planets')
    // O Laravel assume automaticamente que o nome da tabela é o plural do nome do modelo em snake_case (Planet -> planets).
     // Portanto, esta propriedade não é obrigatória aqui, mas é útil para clareza.
    protected $table = 'planets';

    // Campos permitidos para preenchimento em massa
    protected $fillable = [
        'name',
        'description',
        'size_km',
        'solar_system',
        'image_url'
    ];

    // Tipos de dados para conversão automática
    protected $casts = [
        'size_km' => 'integer'
    ];
}

Explicação das Propriedades:

Propriedade Valor Exemplo de Dados
$table Nome da tabela no BD planets
$fillable Campos para preenchimento em massa name, size_km
$casts Conversão automática de tipos size_km: integer

4. Design da Tabela de Planetas

Antes de editar a migração, vamos definir a estrutura de um "planeta":

Campo Tipo de Dados Descrição Exemplo de Valor
id BIGINT (PK) ID Único 1
name VARCHAR(255) Nome do planeta "Marte"
description TEXT Descrição "Planeta vermelho..."
size_km INTEGER Diâmetro em km 6779
solar_system VARCHAR(100) Sistema Solar "Sistema Solar"
image_url VARCHAR(2048) URL da foto (pode ser nulo) "https://..."
created_at TIMESTAMP Data de criação 2025-08-04 12:00:00
updated_at TIMESTAMP Data de atualização 2025-08-05 09:30:00

5. Editando a Migração

Abra o arquivo de migração em database/migrations/..._create_planets_table.php:

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePlanetsTable extends Migration
{
    public function up()
    {
        Schema::create('planets', function (Blueprint $table) {
            $table->id(); // BIGINT auto-incremento

            $table->string('name')->unique();
            $table->text('description');
            $table->integer('size_km');
            $table->string('solar_system', 100);
            $table->string('image_url', 2048)->nullable();

            $table->timestamps(); // created_at + updated_at
        });
    }

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

Pontos Chave:

  • ->unique() → Garante a unicidade dos nomes
  • ->nullable() → O campo pode ser nulo
  • timestamps() → Gerenciamento automático de datas

6. Executando a Migração (Prévia)

Embora a execução será no Capítulo 2.3, vamos ver como será:

php artisan migrate

Saída Esperada:

Migrating: 2025_08_04_000000_create_planets_table
Migrated:  2025_08_04_000000_create_planets_table (32.15ms)

Verificação no pgAdmin 4:

  1. Abra o banco de dados space_api → Schemas → Tables
  2. A tabela planets deve aparecer com seus campos

7. Abordagem Alternativa: Geradores de Código

Para acelerar o desenvolvimento, você pode usar pacotes:

  • Laravel Blueprint - cria modelos/migrações a partir de uma descrição YAML
  • InfyOm Laravel Generator - gerador baseado em um esquema de BD

Exemplo de Blueprint:

models:
  Planet:
    name: string:255
    description: text
    size_km: integer
    solar_system: string:100
    image_url: string:2048? # O caractere '?' significa que o campo pode ser nulo


Quiz para Consolidação

1. Comando Artisan para criar um modelo e sua migração associada:

2. A propriedade `$fillable` no modelo é usada para

3. `nullable()` na migração significa:

4. Tipo de campo para uma longa descrição do planeta:

5. O método `timestamps()` cria:


🚀 Resumo do Capítulo: Você criou um "gêmeo digital" do planeta! Agora seu projeto tem:

  • 🪐 Modelo Planet com lógica de negócios
  • 📊 Migração para a tabela planets no PostgreSQL
  • 🛠️ Propriedades do modelo configuradas (fillable, casts)

Prepare o banco de dados! No próximo capítulo, executaremos a migração e preencheremos o universo com os primeiros planetas.

📌 Verificação:

Certifique-se de que os arquivos Planet.php e ..._create_planets_table.php foram criados nos diretórios corretos.

⚠️ Se o Artisan reclamar:

  • Verifique se você está na pasta do projeto
  • Certifique-se de que as dependências estão instaladas (composer install)
  • Para Windows: adicione PHP e Composer ao PATH