Doctrine Fixtures Foundry (Symfony)
Use when
- Creating test or development data for Doctrine entities.
- Writing a Foundry factory, a named state, a sequence, or a story.
- Building related entities for a test without hand-written setup.
- Migrating legacy Foundry v1 factories or
->object() calls to v2.
Default workflow
- Generate a factory per entity and keep
defaults() to required and unique fields.
- Express each variation as an immutable named state (
admin(), published()).
- Let factories create default relations with
OtherFactory::new().
- Group shared scenarios in stories, and reset the database per test class.
- Assert on real objects and on the repository through
Factory::assert().
Guardrails
- Use
self::faker()->unique() for every unique column, or tests collide.
- Do not call
->object() or ->_real(): v2 factories return real objects.
- Seed Faker (
FOUNDRY_FAKER_SEED) when a failure must be reproducible.
- Do not build a factory for trivial data a test can create inline.
Progressive disclosure
- Use this file for execution posture and risk controls.
- Open references when deep implementation details are needed.
Output contract
- Factories with minimal defaults, named states and relation defaults.
- Stories for shared scenarios, when more than one test needs them.
- Test setup wired with the Foundry extension and
#[ResetDatabase].
References