2
respostas

[Bug] Executando o seed

Ao executar o seed ele não finalizar a execução, fica travado no seed de SpecialistSeeder

2 respostas

Meu seeder está assim:

class SpecialistSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Specialist::factory()
->has(Review::factory()->count(1_000))
->count(1_000)
->create();
}
}

Bom dia.

Isso tá travando porque o seeder está tentando criar 1.000 especialistas, cada um com 1.000 reviews ou seja, 1 milhão de registros em uma única execução. Isso consome muita memória e tempo, por isso a execução não finaliza.

Teste primeiro com valores menores, por exemplo:

Specialist::factory()
    ->has(Review::factory()->count(10))
    ->count(10)
    ->create();

Assim você confirma que o seeder está funcionando corretamente.

Executar em lotes (chunks)
Em vez de tentar criar tudo de uma vez, faça em partes:

for ($i = 0; $i < 100; $i++) {
    Specialist::factory()
        ->has(Review::factory()->count(100))
        ->count(10)
        ->create();
}

Isso gera o mesmo volume total, mas evita sobrecarregar o banco e a memória de uma só vez.

Usar createQuietly se não precisar de eventos
Factories podem disparar eventos do Eloquent, o que também aumenta o tempo. Se não precisar deles:

Specialist::factory()
    ->has(Review::factory()->count(1000))
    ->count(1000)
    ->createQuietly();