การสร้างข้อมูลจำลองด้วย Factory ใน Laravel

Factory เป็นเครื่องมือที่ใช้สร้างข้อมูลจำลองลงในฐานข้อมูล เพื่อความสะดวกและรวดเร็วในการพัฒนาและทดสอบระบบ โดยไม่ต้องใช้ข้อมูลจริงจากผู้ใช้จริง

  1. เริ่มต้นด้วยการสร้าง Factory สำหรับ Model ที่ต้องการ

ตัวอย่างเช่น ต้องการสร้างข้อมูลจำลองเกี่ยวกับ People ให้ใช้คำสั่ง บน Terminal

php artisan make:factory PeopleFactory –model=People

คำสั่งนี้จะสร้างไฟล์ขึ้นมาใน database/factories/PeopleFactory.php

2. เตรียมข้อมูลจำลอง โดยเปิดไฟล์ PeopleFactory.php และเพิ่มโค้ดดังนี้

<?php

namespace Database\Factories;

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

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\People>
 */
class PeopleFactory extends Factory
{
    protected $model = People::class;
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition()
    {
        return [
            'name' => fake()->name,
            'email' => fake()->unique()->safeEmail,
            'address' => fake()->address,
            'city' => fake()->city,
            'postcode' => fake()->postcode,
        ];
    }
}

Factory นี้จะเป็นการเตรียมข้อมูลจำลอง People ที่มีชื่อสุ่ม, อีเมล, ที่อยู่, เมือง และไปรษณีย์ที่ไม่ซ้ำกัน

-3. ต่อไปให้สร้าง Seeder เพื่อลงข้อมูลจำลอง โดยใช้คำสั่ง

php artisan make:seeder PeopleSeeder

เมื่อสร้างเสร็จแล้วจะได้ไฟล์ PeopleSeeder.php ในโฟลเดอร์ database/seeders

เปิดไฟล์ PeopleSeeder.php และเพิ่มโค้ดดังนี้

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class PeopleSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // สร้างข้อมูลจำลอง 10 รายการ
        \App\Models\People::factory(10)->create();
    }
}

3. จากนั้นให้ทำการรันเพื่อทำการลงข้อมูลจำลองในฐานข้อมูล

php artisan db:seed –class=PeopleSeeder

เมื่อทำการรันแล้ว จะมีข้อมูลสุ่มในฐานข้อมูลเรียบร้อยแล้ว ตามรูป

ผู้เขียน

Sinnapa Prasith-Rathsint
sinnapa@g.swu.ac.th