📌 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 ในการทำงานกับฐานข้อมูล!