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
📌 สรุป
คำสั่ง SQL | Query Builder | Eloquent 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