📌 Model ใน Laravel คืออะไร?

Model ใน Laravel เป็นคลาสที่ใช้เชื่อมต่อและจัดการข้อมูลกับฐานข้อมูล โดยใช้ Eloquent ORM (Object-Relational Mapping) เพื่อให้สามารถเรียกใช้งานข้อมูลได้สะดวกขึ้น โดย Model จะเชื่อมโยงกับตารางในฐานข้อมูล โดยอัตโนมัติ

📌 โครงสร้าง MVC ใน Laravel

  • Model (M) → จัดการข้อมูล (Database)
  • View (V) → แสดงผลข้อมูล
  • Controller (C) → ประสานงานระหว่าง Model และ View

📌 การสร้าง Model ใน Laravel

สามารถสร้าง Model ได้โดยใช้คำสั่ง Artisan CLI

php artisan make:model Product

คำสั่งนี้จะสร้างไฟล์ Model ที่ app/Models/Product.php


📌 ตัวอย่าง Model (app/Models/Product.php)

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;

    protected $table = 'products'; // ชื่อตารางที่เชื่อมโยง (สามารถละไว้ได้ ถ้าชื่อเป็นพหูพจน์ของ Model)
    protected $primaryKey = 'id'; // คีย์หลักของตาราง
    public $timestamps = true; // ใช้ timestamps (created_at, updated_at) หรือไม่

    protected $fillable = ['name', 'price', 'stock']; // กำหนดคอลัมน์ที่สามารถแก้ไขได้
}

📌 การใช้งาน Model กับฐานข้อมูล

1️⃣ ดึงข้อมูลจากฐานข้อมูล

📌 ดึงข้อมูลทั้งหมด (SELECT * FROM products;)

use App\Models\Product;

$products = Product::all();

foreach ($products as $product) {
    echo $product->name . " - " . $product->price . "<br>";
}

📌 ดึงข้อมูลแค่บางรายการ (SELECT * FROM products WHERE id = 1;)

$product = Product::find(1);
echo $product->name;

📌 ดึงข้อมูลแบบกำหนดเงื่อนไข (WHERE price > 100)

$products = Product::where('price', '>', 100)->get();

2️⃣ เพิ่มข้อมูลลงในฐานข้อมูล

📌 วิธีที่ 1: ใช้ new Model แล้ว save()

$product = new Product();
$product->name = 'Laptop';
$product->price = 25000;
$product->stock = 10;
$product->save();

📌 วิธีที่ 2: ใช้ create()

Product::create([
    'name' => 'Smartphone',
    'price' => 15000,
    'stock' => 5
]);

📌 หมายเหตุ: ต้องกำหนด fillable ใน Model ก่อนจึงจะใช้ create() ได้

protected $fillable = ['name', 'price', 'stock'];

3️⃣ อัปเดตข้อมูลในฐานข้อมูล

📌 วิธีที่ 1: ใช้ find() แล้ว save()

$product = Product::find(1);
$product->price = 20000;
$product->save();

📌 วิธีที่ 2: ใช้ update()

Product::where('id', 1)->update(['price' => 20000]);

4️⃣ ลบข้อมูลออกจากฐานข้อมูล

📌 วิธีที่ 1: ใช้ find() แล้ว delete()

$product = Product::find(1);
$product->delete();

📌 วิธีที่ 2: ใช้ destroy()

Product::destroy(1);

📌 วิธีที่ 3: ลบตามเงื่อนไข (DELETE FROM products WHERE price > 20000)

Product::where('price', '>', 20000)->delete();

📌 การใช้ Relationship (ความสัมพันธ์ระหว่าง Model)

📌 1. One-to-Many (เช่น Product มีหลาย Review)

สร้าง Model Review

php artisan make:model Review

กำหนด Relationship ใน Product.php

public function reviews()
{
    return $this->hasMany(Review::class);
}

ใช้งาน Relationship

$product = Product::find(1);
$reviews = $product->reviews; // ดึงรีวิวทั้งหมดของสินค้านี้

📌 2. Many-to-Many (เช่น User มีหลาย Role และ Role มีหลาย User)

สร้าง Model Role

php artisan make:model Role

กำหนด Relationship ใน User.php

public function roles()
{
    return $this->belongsToMany(Role::class);
}

ใช้งาน Relationship

$user = User::find(1);
$roles = $user->roles; // ดึง Role ของ User

📌 การใช้ Factory และ Seeder สำหรับการสร้างข้อมูลทดสอบ

📌 1. สร้าง Factory

php artisan make:factory ProductFactory --model=Product

📌 2. กำหนดข้อมูลทดสอบใน database/factories/ProductFactory.php

use Illuminate\Database\Eloquent\Factories\Factory;

class ProductFactory extends Factory
{
    protected $model = Product::class;

    public function definition()
    {
        return [
            'name' => $this->faker->word,
            'price' => $this->faker->numberBetween(100, 5000),
            'stock' => $this->faker->numberBetween(1, 100),
        ];
    }
}

📌 3. ใช้งาน Factory ใน Seeder

php artisan make:seeder ProductSeeder

จากนั้นแก้ไข database/seeders/ProductSeeder.php

use App\Models\Product;

public function run()
{
    Product::factory(10)->create();
}

📌 4. รัน Seeder

php artisan db:seed --class=ProductSeeder

📌 สรุป

ฟังก์ชันตัวอย่างโค้ดคำอธิบาย
ดึงข้อมูลProduct::all();ดึงข้อมูลทั้งหมด
ดึงข้อมูลแบบมีเงื่อนไขProduct::where('price', '>', 100)->get();ดึงเฉพาะสินค้าที่ราคามากกว่า 100
เพิ่มข้อมูล$product = new Product(); $product->save();เพิ่มข้อมูลใหม่
อัปเดตข้อมูล$product = Product::find(1); $product->save();อัปเดตข้อมูลของสินค้าที่มี id = 1
ลบข้อมูล$product->delete();ลบข้อมูลออกจากฐานข้อมูล
One-to-Many$product->reviews;ดึงรีวิวทั้งหมดของสินค้า
Many-to-Many$user->roles;ดึง Role ทั้งหมดของ User

Model ช่วยให้เราจัดการข้อมูลใน Laravel ได้ง่ายและสะอาด
รองรับความสัมพันธ์ระหว่างตาราง (Relationship)
ทำงานร่วมกับ Factory & Seeder เพื่อสร้างข้อมูลทดสอบได้

🚀 Model เป็นหัวใจหลักของ Laravel ในการทำงานกับฐานข้อมูล!

Leave a Reply

Your email address will not be published. Required fields are marked *