Skip to content

🗄️ Workshop 2: Database & Seeding

ใน Workshop นี้เราจะมาจัดการข้อมูลใน Database เพื่อให้พร้อมสำหรับการทดสอบ API และ Frontend ในขั้นตอนถัดไป

เป้าหมาย: มีข้อมูลตัวอย่าง (Dummy Data) ในตาราง products อย่างน้อย 5-10 รายการ


🌱 วิธีที่ 1: ใช้ Seeder (แนะนำ)

Laravel มีระบบ Seeder เพื่อช่วยสร้างข้อมูลจำลองได้ง่ายๆ

1. สร้าง Seeder

bash
php artisan make:seeder ProductSeeder

2. เขียนโค้ดเพิ่มข้อมูล

ไปที่ database/seeders/ProductSeeder.php:

php
use App\Models\Product; // import Model

public function run(): void
{
    // สร้างข้อมูลที่ 1
    Product::create([
        'name' => 'iPhone 15',
        'description' => 'สมาร์ทโฟนรุ่นล่าสุดจาก Apple',
        'price' => 32900,
        'stock' => 10
    ]);

    // สร้างข้อมูลที่ 2
    Product::create([
        'name' => 'MacBook Air',
        'description' => 'แล็ปท็อปบางเบา ชิป M2',
        'price' => 39900,
        'stock' => 5
    ]);
    
    // ... เพิ่มอีกตามต้องการ
}

3. รัน Seeder

bash
php artisan db:seed --class=ProductSeeder

🏭 วิธีที่ 2: ใช้ Model Factory (สำหรับข้อมูลเยอะๆ)

ถ้ายากได้ข้อมูลสัก 50 รายการ การนั่งเขียนทีละอันคงเหนื่อย เราใช้ Factory ช่วยได้

1. สร้าง Factory (ถ้ายังไม่มี)

bash
php artisan make:factory ProductFactory

2. กำหนดโครงสร้างข้อมูลสุ่ม

ไปที่ database/factories/ProductFactory.php:

php
public function definition(): array
{
    return [
        'name' => fake()->word(), // สุ่มคำ
        'description' => fake()->sentence(), // สุ่มประโยค
        'price' => fake()->numberBetween(100, 10000), // สุ่มตัวเลข
        'stock' => fake()->numberBetween(1, 100),
    ];
}

3. เรียกใช้ใน Seeder

กลับไปที่ database/seeders/ProductSeeder.php หรือ DatabaseSeeder.php:

php
// สร้างข้อมูลสุ่ม 50 รายการ
\App\Models\Product::factory(50)->create();

🛠 วิธีที่ 3: ใช้ Artisan Tinker (ทดสอบด่วน)

ถ้าไม่อยากสร้างไฟล์ Seeder สามารถยิงคำสั่งสดๆ ได้เลย

  1. เข้าโหมด Tinker:
bash
php artisan tinker
  1. พิมพ์คำสั่ง PHP:
php
App\Models\Product::create(['name' => 'Mouse', 'price' => 500, 'stock' => 20]);

(กด Enter แล้วพิมพ์ exit เพื่อออก)


✅ ตรวจสอบผลลัพธ์

เช็คว่าข้อมูลเข้าแล้วหรือยัง:

  1. เปิด phpMyAdmin ดูตาราง products
  2. หรือใช้ Postman ยิง GET /api/products ดูว่ามี JSON กลับมาไหม