Rozbudowujemy fabrykę i seeder. Na więcej atrakcji musimy poczekać, aż przerobimy relacje, ale to i tak już niezła wiedza o seedowaniu baz danych.

Ok, najpierw poprawmy definicje w fabryce:

public function definition(): array
    {
        return [
            'firstName' => fake()->firstName(),
            'lastName' => fake()->lastName(),
            'age' => fake()->numberBetween(16, 60),
            'created_at' => fake()->dateTimeBetween('-2 years'),
            'updated_at' => fake()->dateTimeBetween('created_at', 'now')
        ];
    }

Będzie większa różnorodność jeśli chodzi o created_at. Ok, teraz tworzymy stany:

public function adults()
    {
        return $this->state(function (array $attributes) {
            return [
                'age' => fake()->numberBetween(19, 60),
            ];
        });
    }

    public function kids()
    {
        return $this->state(function (array $attributes) {
            return [
                'age' => fake()->numberBetween(14, 18),
            ];
        });
    }

    public function male()
    {
        return $this->state(function (array $attributes) {
            return [
                'firstName' => fake()->firstName('male'),
                'lastName' => fake()->lastName('male'),
            ];
        });
    }

    public function female()
    {
        return $this->state(function (array $attributes) {
            return [
                'firstName' => fake()->firstName('female'),
                'lastName' => fake()->lastName('female'),
            ];
        });
    }

Teraz używamy tych stanów w seederze:

class PersonSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        Person::factory()
        ->count(5)
        ->male()
        ->create();

        Person::factory()
        ->count(5)
        ->female()
        ->create();

        Person::factory()
        ->count(5)
        ->kids()
        ->create();

        Person::factory()
        ->count(5)
        ->adults()
        ->create();
    }
}

Oczywiście musimy wykonać odpowiednią komendę:

php artisan db:seed --class=PersonSeeder

I już możemy obserwować nasze zmiany w bazie danych…