CRUD com Laravel 12, Breeze e Fortify – Parte 5A

CRUD Laravel 12: Nesta etapa, vamos iniciar a construção do nosso sistema de gerenciamento de tarefas, criando toda a estrutura base: Model, Migration, Factory e Seeder. Essa preparação é essencial para o funcionamento do CRUD (Create, Read, Update, Delete) completo, que finalizaremos na próxima parte.

CRUD com Laravel 12, Breeze e Fortify

Objetivo

Criar a estrutura do banco de dados e os arquivos necessários para manipular as tarefas do nosso gerenciador no Laravel 12, utilizando as boas práticas do framework.


Etapa 1 — Criar o Model, Migration e Factory de Tarefas

O Laravel nos permite gerar de forma rápida e padronizada os principais componentes para uma entidade. No nosso caso, a entidade será Task.

Execute no terminal o comando abaixo:

php artisan make:model Task -mf

Esse comando irá gerar:

  • app/Models/Task.php: o model.
  • database/migrations/xxxx_xx_xx_create_tasks_table.php: o arquivo de migration.
  • database/factories/TaskFactory.php: a factory correspondente.

Etapa 2 — Definir os Campos da Migration

Abra o arquivo de migration recém-criado em database/migrations e defina os campos da tabela tasks. Por exemplo:

Schema::create('tasks', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->onDelete('cascade');
    $table->string('title');
    $table->text('description')->nullable();
    $table->boolean('is_completed')->default(false);
    $table->timestamps();
});

Essa estrutura define que cada tarefa pertence a um usuário, tem um título obrigatório, uma descrição opcional e um campo que indica se foi concluída.


Etapa 3 — Rodar a Migration

Para aplicar essa estrutura ao banco de dados:

php artisan migrate

Etapa 4 — Definir a Factory

Abra database/factories/TaskFactory.php e edite o método definition():

public function definition(): array
{
    return [
        'user_id' => \App\Models\User::factory(),
        'title' => fake()->sentence(3),
        'description' => fake()->paragraph(),
        'is_completed' => fake()->boolean(),
    ];
}

Essa factory facilitará a geração de tarefas falsas para testes e desenvolvimento.


Etapa 5 — Criar um Seeder (Opcional)

Você pode popular o banco com tarefas fictícias para testar seu CRUD. Execute:

php artisan make:seeder TaskSeeder

Depois, edite o database/seeders/TaskSeeder.php:

public function run(): void
{
    \App\Models\Task::factory(20)->create();
}

Registre o seeder em DatabaseSeeder.php:

public function run(): void
{
    $this->call(TaskSeeder::class);
}

E execute:

php artisan db:seed

Etapa 6 — Relacionamento com o Usuário

Edite o model Task (app/Models/Task.php) e defina o relacionamento (e ajuste os campos autopreenchidos):

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\User;

class Task extends Model
{
    use HasFactory;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'user_id',       // ID do usuário ao qual a tarefa pertence
        'title',         // Título da tarefa
        'description',   // Descrição opcional da tarefa
        'is_completed',  // Status de conclusão da tarefa
    ];

    /**
     * Get the user that owns the task.
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

No model User, adicione:

public function tasks()
{
    return $this->hasMany(Task::class);
}

Etapa 7 — Organização e Padrão (Opcional)

Se desejar, crie uma pasta Tasks em app/Models/Tasks e mova seu model Task.php para ela. Atualize os namespaces e use conforme necessário.


Conclusão da Parte 5A

Agora temos:

  • Uma tabela tasks pronta no banco de dados.
  • Um model Task com relacionamento definido.
  • Uma factory funcional para gerar dados fictícios.
  • Opcionalmente, dados populados via seeder.

Na Parte 5B, implementaremos o CRUD completo com rotas, controllers e views, permitindo que o usuário crie, edite, visualize e exclua suas tarefas.

🔗 Leitura recomendada: Laravel, Breeze e Fortify — Parte 4: Implementando Autenticação com 2FA (Two-Factor Authentication).