database Junior

Explain database seeding and factories

Short Answer

Factories generate test data with faker values. Seeders populate the database with specific known data for development.

Detailed Answer

Factories and Seeders: Factories: - Define a blueprint for generating model instances - Use fake() for realistic test data - Define states for variations (published, admin) - Used in tests and seeders - php artisan make:factory PostFactory Seeders: - Populate database with specific data - Used for roles, categories, demo accounts - Run with php artisan db:seed - Called in DatabaseSeeder Best practices: - Use factories for bulk test data - Use seeders for reference/lookup data - Seeders should be idempotent (safe to run multiple times) - Use create() for database, make() for memory

Code Example

Example
// Factory
public function definition(): array
{
    return [
        'title' => fake()->sentence(),
        'slug' => fake()->unique()->slug(),
        'body' => fake()->paragraphs(3, true),
        'status' => fake()->randomElement(['draft', 'published']),
    ];
}

public function published(): static
{
    return $this->state(fn () => [
        'status' => 'published',
        'published_at' => fake()->dateTimeBetween('-1 year'),
    ]);
}

// Usage
Post::factory()->count(20)->published()->create();

// Seeder
public function run(): void
{
    Role::create(['name' => 'Admin', 'slug' => 'admin']);
    Role::create(['name' => 'Editor', 'slug' => 'editor']);
}

// Run
php artisan migrate:fresh --seed

Interview Tip

Explain that factories are for test data (random, bulk) while seeders are for setup data (specific, known). Mention factory states for data variations.