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…