Сідер описує, скільки й яких даних потрібно, а фабрика - як виглядає один запис.
public function run(): void
{
User::factory()
->count(50)
->has(Post::factory()->count(3)->published())
->create();
User::factory()->admin()->create(['email' => 'admin@example.test']);
}
Що робить дані корисними для розробки:
- стани фабрики (
published(),admin(),suspended()) - видно крайні випадки, а не лише «середній» запис; - зв'язки через
has()іfor()- сторінки показують реальну структуру; Sequence- чергування значень: половина активних, половина ні;- відомий обліковий запис для входу - з фіксованим email і паролем з
.env.example.
Відтворюваність: fake()->seed(1234) на початку робить згенеровані дані однаковими між запусками - зручно, коли багу треба відтворити на тих самих даних.
Швидкість: тисячі записів через create() повільні, бо кожен - окремий INSERT з подіями. Для великих обсягів беруть WithoutModelEvents, транзакцію навколо сідування або insert() пачками з масивів, згенерованих make()->toArray().