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.

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
taskspronta no banco de dados. - Um model
Taskcom 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).