Overview
Use model factories and database seeders to populate realistic test data in Laravel.
Originally published on Jang Keyte's Blog.
This article covers Generate Laravel Test Data with Factories & Seeders — practical notes from real-world web development experience.
Code Examples
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Tree>
*/
class TreeFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
$area = fake()->randomElement(['A', 'B']);
$cluster = fake()->randomElement(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']);
$size = fake()->randomFloat(1, 1, 5);
return [
'uid' => fake()->numerify($area . $cluster . '######'),
'name' => fake()->name(),
'type' => fake()->numberBetween(1, 5),
'family' => fake()->randomDigitNotNull(),
'unit' => fake()->randomDigitNotNull(),
'age' => fake()->randomFloat(1, 1, 20),
'value' => fake()->sentence(),
'cluster' => $cluster,
'area' => $area,
'image' => fake()->imageUrl($width=400, $height=400),
'locate' => '10.' . fake()->numberBetween(1000, 999999) . ',106.' . fake()->numberBetween(1000, 999999),
'status' => fake()->numberBetween(1, 5),
'birthday' => fake()->dateTime(),
'size' => $size,
'height' => fake()->randomFloat(1, 1, 10),
'perimeter' => $size * 3.14,
'history' => fake()->paragraph(),
];
}
}
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class TreeSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
\App\Models\Tree::factory(10)->create();
}
}
php artisan db:seed --class=TreeSeeder
Read More
For the full Vietnamese version, switch language using the VI | EN toggle above, or visit the original post.
Tạo một Factory
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Tree>
*/
class TreeFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
$area = fake()->randomElement(['A', 'B']);
$cluster = fake()->randomElement(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']);
$size = fake()->randomFloat(1, 1, 5);
return [
'uid' => fake()->numerify($area . $cluster . '######'),
'name' => fake()->name(),
'type' => fake()->numberBetween(1, 5),
'family' => fake()->randomDigitNotNull(),
'unit' => fake()->randomDigitNotNull(),
'age' => fake()->randomFloat(1, 1, 20),
'value' => fake()->sentence(),
'cluster' => $cluster,
'area' => $area,
'image' => fake()->imageUrl($width=400, $height=400),
'locate' => '10.' . fake()->numberBetween(1000, 999999) . ',106.' . fake()->numberBetween(1000, 999999),
'status' => fake()->numberBetween(1, 5),
'birthday' => fake()->dateTime(),
'size' => $size,
'height' => fake()->randomFloat(1, 1, 10),
'perimeter' => $size * 3.14,
'history' => fake()->paragraph(),
];
}
}
Tạo một Seeder
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class TreeSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
\App\Models\Tree::factory(10)->create();
}
}
Chạy command
php artisan db:seed --class=TreeSeeder
Thanks for reading!