Laravel Seeding

Laravel
Tempo de leitura: 4 minutos

O Laravel Seeding é o processo de alimentar o banco de dados com dados iniciais ou de teste. Essa funcionalidade é crucial para manter um ambiente de desenvolvimento e teste consistente, permitindo que a equipe trabalhe com informações realistas sem a necessidade de inserção manual repetitiva.

O sistema de seeding do Laravel utiliza classes Seeders e Model Factories para criar dados fictícios de forma eficiente.

1. 📝 Escrevendo Seeders (Classes de Inserção)

Um Seeder é uma classe que contém o método run(), onde a lógica de inserção de dados é definida.

A. Geração do Seeder

Bash

php artisan make:seeder UserSeeder

B. Inserção de Dados

Você pode inserir dados usando o Eloquent ORM (dispara eventos do modelo) ou o Query Builder (mais rápido, sem eventos):

PHP

// database/seeders/UserSeeder.php

use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class UserSeeder extends Seeder
{
    public function run(): void
    {
        // 1. Inserção com Eloquent (Dispara eventos 'created')
        User::create([
            'name' => 'Admin Principal',
            'email' => '[email protected]',
            'password' => Hash::make('123456'),
        ]);

        // 2. Inserção com Query Builder (Ideal para grandes volumes e velocidade)
        DB::table('settings')->insert([
            ['key' => 'app_name', 'value' => 'Laravel App'],
            ['key' => 'items_per_page', 'value' => 15],
        ]);
    }
}

2. 🏭 Model Factories: Geração de Dados Fictícios

Model Factories são classes que definem o estado padrão e a forma como os dados fictícios devem ser gerados para um modelo específico, utilizando a biblioteca Faker.

A. Geração e Definição da Factory

Bash

php artisan make:factory PostFactory --model=Post

PHP

// database/factories/PostFactory.php

use App\Models\User;

class PostFactory extends Factory
{
    protected $model = \App\Models\Post::class;
    
    public function definition(): array
    {
        return [
            // Geração de dados aleatórios com Faker
            'title' => fake()->sentence(5), 
            'body' => fake()->paragraphs(3, true),
            
            // Cria um novo usuário relacionado (relacionamento de factory)
            'user_id' => User::factory(), 
        ];
    }
}

B. Usando Factories em Seeders

No Seeder, você usa o método factory() do modelo para criar instâncias.

PHP

use App\Models\Post;
use App\Models\User;

class PostSeeder extends Seeder
{
    public function run(): void
    {
        // Cria 50 posts, onde cada um terá um novo usuário relacionado (Factory Relacionada)
        Post::factory(50)->create(); 

        // Cria 5 usuários específicos
        User::factory(5)->create([
            'password' => Hash::make('123456'),
        ]);
    }
}

C. Criando e Relacionando em Loop

É comum criar um número limitado de usuários e, em seguida, criar um número variável de itens relacionados a cada um deles:

PHP

use App\Models\User;
use App\Models\Post;

// Cria 10 usuários e para cada um, cria entre 1 e 5 posts
User::factory(10)->create()->each(function (User $user) {
    Post::factory(rand(1, 5))->create(['user_id' => $user->id]);
});

3. 📦 Organização e Execução

A. Chamando Seeders Adicionais (DatabaseSeeder)

O DatabaseSeeder.php (o seeder principal) é o ponto de entrada. Use o método call() para organizar a execução de seeders em módulos.

PHP

// database/seeders/DatabaseSeeder.php

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        // Limpa posts e users antes de rodar os seeders (opcional)
        // Post::truncate();
        // User::truncate();
        
        $this->call([
            UserSeeder::class,
            CategorySeeder::class,
            PostSeeder::class,
        ]);
    }
}

B. Execução de Comandos Artisan

ComandoFunção
php artisan db:seedExecuta o DatabaseSeeder principal.
php artisan db:seed --class=UserSeederExecuta um seeder específico, ignorando o DatabaseSeeder.
php artisan migrate:refresh --seedReverte todas as migrations, executa as migrations novamente e, em seguida, executa o db:seed. (Comum em desenvolvimento).
php artisan migrate:fresh --seedExclui todas as tabelas, executa migrations novamente e, em seguida, o db:seed. (Mais rápido que refresh).

✅ Conclusão Laravel Seeding

Laravel Seeding: O seeding é uma prática essencial para o desenvolvimento ágil e testes. O uso combinado de Seeders e Model Factories no Laravel permite a criação de volumes de dados fictícios complexos, realistas e com relacionamentos definidos, garantindo que seu ambiente de desenvolvimento seja sempre consistente e funcional. Dominar as factories é o caminho para um seeding rápido e robusto.

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:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

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:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime

Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.