การใช้งานฐานข้อมูลใน Laravel ผ่าน Eloquent ORM

Eloquent เป็น ORM (Object-Relational Mapping) ที่ช่วยให้เราสามารถทำงานกับฐานข้อมูลได้ง่ายขึ้นโดยใช้ Model แทน SQL Query

📌 ก่อนใช้งานให้แน่ใจว่ามี Model
โดยปกติ Laravel จะมี Model User (app/Models/User.php) มาให้แล้ว
ถ้าต้องการสร้าง Model ใหม่ใช้คำสั่ง

php artisan make:model Product

1️⃣ SELECT – ดึงข้อมูล

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

use App\Models\User;

$users = User::all();

foreach ($users as $user) {
    echo $user->name . "<br>";
}

🔹 all() คืนค่าทุกแถวเหมือน SELECT * FROM users;

📌 ดึงข้อมูลแค่บางคอลัมน์ (SELECT name, email FROM users)

$users = User::select('name', 'email')->get();

📌 ดึงข้อมูลแบบมีเงื่อนไข (WHERE id = 1)

$user = User::where('id', 1)->first();
echo $user->name;

🔹 ใช้ first() ดึงแค่ 1 แถวแรก

📌 ดึงข้อมูลหลายเงื่อนไข (WHERE name = 'John' AND email = 'john@example.com')

$user = User::where('name', 'John')
    ->where('email', 'john@example.com')
    ->first();

📌 ใช้ orWhere (WHERE name = 'John' OR email = 'john@example.com')

$users = User::where('name', 'John')
    ->orWhere('email', 'john@example.com')
    ->get();

📌 ใช้ whereBetween (WHERE age BETWEEN 18 AND 25)

$users = User::whereBetween('age', [18, 25])->get();

2️⃣ INSERT – เพิ่มข้อมูล

📌 เพิ่มข้อมูลใหม่ (INSERT INTO users (name, email) VALUES (?, ?);)

$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->password = bcrypt('password');
$user->save();

🔹 save() ใช้บันทึกข้อมูลลงฐานข้อมูล

📌 เพิ่มข้อมูลแบบใช้ create()

User::create([
    'name' => 'Alice',
    'email' => 'alice@example.com',
    'password' => bcrypt('123456'),
]);

⚠️ ต้องแน่ใจว่า fillable ถูกกำหนดไว้ใน Model (app/Models/User.php)

protected $fillable = ['name', 'email', 'password'];

3️⃣ UPDATE – อัปเดตข้อมูล

📌 อัปเดตข้อมูล (UPDATE users SET name = 'John Updated' WHERE id = 1;)

$user = User::find(1);
$user->name = 'John Updated';
$user->save();

🔹 find(1) ค้นหา ID = 1 แล้วอัปเดต

📌 อัปเดตแบบใช้ update()

User::where('id', 1)->update(['name' => 'John Updated']);

🔹 สั้นกว่า find() และ save()


4️⃣ DELETE – ลบข้อมูล

📌 ลบข้อมูล (DELETE FROM users WHERE id = 1;)

$user = User::find(1);
$user->delete();

📌 ลบข้อมูลแบบใช้ destroy()

User::destroy(1);

📌 ลบหลายรายการ (DELETE FROM users WHERE id IN (1,2,3);)

User::destroy([1, 2, 3]);

5️⃣ ORDER BY และ LIMIT

📌 เรียงลำดับ (ORDER BY created_at DESC)

$users = User::orderBy('created_at', 'desc')->get();

📌 จำกัดจำนวนแถว (LIMIT 5)

$users = User::limit(5)->get();

📌 ข้ามแถวแรกและดึงแค่ 10 แถว (OFFSET 10 LIMIT 10)

$users = User::skip(10)->take(10)->get();

6️⃣ JOIN – รวมตาราง

📌 INNER JOIN (JOIN profiles ON users.id = profiles.user_id)

$users = User::join('profiles', 'users.id', '=', 'profiles.user_id')
    ->select('users.*', 'profiles.bio')
    ->get();

🔹 ถ้ามี relationship ใน Model ใช้ Eloquent Relationship แทน


7️⃣ GROUP BY และ HAVING

📌 นับจำนวนผู้ใช้แต่ละสถานะ (GROUP BY status)

$users = User::select('status', DB::raw('COUNT(*) as total'))
    ->groupBy('status')
    ->get();

📌 กรองกลุ่มข้อมูล (HAVING COUNT(*) > 10)

$users = User::select('status', DB::raw('COUNT(*) as total'))
    ->groupBy('status')
    ->having('total', '>', 10)
    ->get();

8️⃣ ใช้ Transactions

DB::transaction(function () {
    $user1 = User::find(1);
    $user1->balance -= 100;
    $user1->save();

    $user2 = User::find(2);
    $user2->balance += 100;
    $user2->save();
});

🔹 ถ้าคำสั่งใดล้มเหลว ทั้งหมดจะถูก rollback


📌 สรุป

คำสั่ง SQLQuery BuilderEloquent ORM
SELECT * FROM users;DB::table('users')->get();User::all();
SELECT name FROM users WHERE id = 1;DB::table('users')->where('id', 1)->first();User::where('id', 1)->first();
INSERT INTO users (name, email) VALUES ('John', 'john@example.com');DB::table('users')->insert([...]);$user = new User(); $user->save();
UPDATE users SET name = 'John Updated' WHERE id = 1;DB::table('users')->where('id', 1)->update([...]);$user = User::find(1); $user->save();
DELETE FROM users WHERE id = 1;DB::table('users')->where('id', 1)->delete();$user = User::find(1); $user->delete();
ORDER BY created_at DESC;DB::table('users')->orderBy('created_at', 'desc')->get();User::orderBy('created_at', 'desc')->get();
JOIN profiles ON users.id = profiles.user_id;DB::table('users')->join('profiles', 'users.id', '=', 'profiles.user_id')->get();User::with('profile')->get();

Eloquent ใช้งานง่ายกว่า Query Builder และเหมาะกับ Laravel มากที่สุด
รองรับ Relationship เช่น One-to-Many, Many-to-Many ได้ง่าย
ช่วยให้โค้ดอ่านง่ายและลดข้อผิดพลาดจาก SQL Injection

🚀 เหมาะสำหรับการพัฒนาแอป Laravel ที่ต้องการความสะอาดและง่ายต่อการดูแล!

Leave a Reply

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