Overview
Seeders are useful for:- Creating default admin users
- Populating lookup tables (roles, categories, etc.)
- Generating test data for development
- Setting up demo accounts
Running Seeders
Run all seeders
Execute all seeders in your application:This runs all seeder files in the
database/seeders/ directories.Default User Seeder
The starter kit includes a user seeder that creates a default admin account:app/users/database/seeders/user_seeder.ts
Creating a Seeder
Generate a seeder
Create a new seeder using the Ace command:For module-specific seeders:This creates a seeder file in
app/products/database/seeders/product_seeder.ts.Seeder Best Practices
Use updateOrCreateMany for Idempotency
Always useupdateOrCreateMany() instead of createMany() to make seeders idempotent:
Use Factories for Test Data
For generating large amounts of test data, use model factories instead:Organize Seeders by Module
Place seeders in their respective module directories:Common Seeding Patterns
Seeding Related Data
Seeding with Relationships
Conditional Seeding
Only seed data in certain environments:Seeding Order
Seeders run in alphabetical order by filename. To control execution order, prefix filenames with numbers:MainSeeder pattern:
database/seeders/main_seeder.ts
Environment-Specific Seeders
Create different seeders for different environments:Resetting and Reseeding
Tips and Tricks
Use consistent passwords in development
Keep passwords simple in development seeders (like
'123') for easy testing.Seed real-looking data
Use libraries like
@faker-js/faker to generate realistic test data.Document default credentials
Always document seeded user credentials in your README or .env.example.
Never seed production data in development
Keep production and development data separate. Never use real user data in seeders.
Troubleshooting
Seeder not running
Seeder not running
Ensure:
- The seeder file is in a
database/seeders/directory - The seeder extends
BaseSeeder - The file exports a default class
- The class has a
run()method
Duplicate key errors
Duplicate key errors
Use
updateOrCreateMany() instead of createMany() to handle existing records:Foreign key constraint errors
Foreign key constraint errors
Seed parent tables before child tables:
- First seed roles
- Then seed users (which reference roles)
- Finally seed user-dependent data
Seeder running in production
Seeder running in production
Use the
environment property to restrict seeders:Resources
Seeders Documentation
Official AdonisJS seeders guide
Model Factories
Generate fake data efficiently
Migrations
Learn about database migrations
Lucid ORM
Database and ORM documentation