Generate Laravel Test Data with Factories & Seeders

Use model factories and database seeders to populate realistic test data in Laravel.

Sat Apr 29 2023
— words · — minutes

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.


Thanks for reading!

Generate Laravel Test Data with Factories & Seeders

Sat Apr 29 2023
— words · — minutes