Topics Database & Migrations Seeders & Factories
intermediate 14 min read

Seeders & Factories

Database seeders, model factories, faker data, and creating realistic test data.

Seeders

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
public function run(): void
{
$this->call([
CategorySeeder::class,
PostSeeder::class,
]);

User::factory()
->count(100)
->hasPosts(5)
->create();
}
}

Model Factories

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;

class UserFactory extends Factory
{
protected $model = User::class;

public function definition(): array
{
return [
"name" => fake()->name(),
"email" => fake()->unique()->safeEmail(),
"password" => bcrypt("password"),
"is_active" => fake()->boolean(90),
];
}

public function admin(): static
{
return $this->state(fn (array $attrs) => [
"is_admin" => true,
]);
}
}

Factory Relationships

// Has many
User::factory()->hasPosts(3)->create();

// Belongs to
Post::factory()->for(User::factory()->admin())->create();

// Many to many
User::factory()->hasAttached(
Role::factory()->count(2),
["assigned_at" => now()]
)->create();

Examples

<?php
use App\Models\Post;
use App\Models\User;

// Create 10 users each with 3 posts
User::factory()
    ->count(10)
    ->has(Post::factory()->count(3))
    ->create();

echo 'Created users with posts.';

Your Notes

Sign in to take notes for this lesson.

Discussion

Sign in to join the discussion.

Flashcards

Sign in to create flashcards.