ORM และโมเดลแบบ Fluent
บันทึกข้อมูลด้วย Fluent ORM ของ Vapor
ORM และโมเดลแบบ Fluent เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
Fluent คืออะไร
Fluent คือ ORM ของ Vapor ซึ่งจับคู่คลาส Swift กับแถวในฐานข้อมูล และรองรับ PostgreSQL, MySQL, SQLite และ MongoDB ผ่าน API เดียว คุณเขียน Swift ส่วน Fluent จะเขียน SQL ให้
import Fluent
import Vaporการกำหนดโมเดล
โมเดล Fluent คือ final class ที่สอดคล้องกับ Model และโดยทั่วไปจะสอดคล้องกับ Content ด้วย โมเดลจะประกาศ schema (ชื่อตาราง) และคุณสมบัติ @ID สำหรับคีย์หลัก
final class Planet: Model, Content {
static let schema = "planets"
@ID(key: .id)
var id: UUID?
init() {}
}ตัวห่อคุณสมบัติ @Field
จับคู่คอลัมน์ที่จัดเก็บไว้ด้วย @Field คีย์นี้คือชื่อคอลัมน์ในฐานข้อมูล เพิ่มคุณสมบัติหนึ่งรายการต่อหนึ่งคอลัมน์ที่ต้องการบันทึก
@Field(key: "name")
var name: String
@Field(key: "diameter_km")
var diameterKm: Intโมเดลฉบับสมบูรณ์
โมเดลยังต้องมีตัวเริ่มต้นที่รับค่าตามสมาชิกเพิ่มเติมจาก init() ว่างที่จำเป็น เพื่อให้คุณสร้างอินสแตนซ์ในโค้ดได้
final class Planet: Model, Content {
static let schema = "planets"
@ID(key: .id) var id: UUID?
@Field(key: "name") var name: String
init() {}
init(id: UUID? = nil, name: String) {
self.id = id
self.name = name
}
}การย้ายโครงสร้างฐานข้อมูล
การย้ายโครงสร้างฐานข้อมูลใช้สร้างหรือแก้ไขโครงสร้างฐานข้อมูล โดยสอดคล้องกับ AsyncMigration และใช้ prepare เพื่อใช้งานการเปลี่ยนแปลง กับ revert เพื่อย้อนกลับ
struct CreatePlanet: AsyncMigration {
func prepare(on db: Database) async throws {
try await db.schema("planets")
.id()
.field("name", .string, .required)
.create()
}
func revert(on db: Database) async throws {
try await db.schema("planets").delete()
}
}การลงทะเบียนการย้ายโครงสร้าง
เพิ่มการย้ายโครงสร้างลงใน app.migrations ในการกำหนดค่าของคุณ จากนั้นเรียกใช้ด้วย app.autoMigrate() หรือคำสั่ง migrate
app.migrations.add(CreatePlanet())
try await app.autoMigrate()การบันทึกระเบียน
สร้างอินสแตนซ์ของโมเดล แล้วเรียกใช้ save(on:) พร้อมฐานข้อมูลของคำขอ Fluent จะส่งคำสั่ง INSERT และเติม id ที่สร้างขึ้นให้
app.post("planets") { req async throws -> Planet in
let planet = try req.content.decode(Planet.self)
try await planet.save(on: req.db)
return planet
}การสอบถามระเบียน
ใช้ Model.query(on:) เพื่อสร้างคำสั่งสอบถามอย่างต่อเนื่อง .all() จะส่งคืนทุกแถว จากนั้นเชื่อมต่อการกรองและการเรียงลำดับได้ตามต้องการ
app.get("planets") { req async throws -> [Planet] in
try await Planet.query(on: req.db).all()
}การกรองและการค้นหาด้วย ID
find(_:on:) ดึงข้อมูลตามคีย์หลักและส่งคืนค่าแบบตัวเลือก ส่วน filter ใช้จำกัดผลลัพธ์ตามค่าของคอลัมน์
let earth = try await Planet.query(on: req.db)
.filter(\.$name == "Earth")
.first()
let byId = try await Planet.find(someUUID, on: req.db)การอัปเดตและการลบ
แก้ไขคุณสมบัติของโมเดลที่ดึงมา แล้วเรียกใช้ update(on:) หรือลบโมเดลด้วย delete(on:) ทั้งสองการทำงานเป็นแบบอะซิงก์กับฐานข้อมูล
if let planet = try await Planet.find(id, on: req.db) {
planet.name = "Renamed"
try await planet.update(on: req.db)
// or: try await planet.delete(on: req.db)
}ความสัมพันธ์
Fluent จำลองความสัมพันธ์ของโมเดลด้วยตัวห่อคุณสมบัติ ได้แก่ @Parent และ @Child สำหรับความสัมพันธ์แบบหนึ่งต่อหนึ่งหรือหนึ่งต่อหลาย และ @Siblings สำหรับความสัมพันธ์แบบหลายต่อหลาย ตัวห่อเหล่านี้กำหนดคีย์ต่างประเทศและเปิดใช้การโหลดล่วงหน้าด้วย .with(...)
@Parent(key: "star_id")
var star: Star
// query eagerly loading the parent
Planet.query(on: req.db).with(\.$star).all()ตรวจสอบอย่างรวดเร็ว: Fluent
ตรวจสอบความเข้าใจเกี่ยวกับ ORM ของคุณ
สรุป: ORM และโมเดลของ Fluent
ตอนนี้คุณสามารถจัดเก็บข้อมูลถาวรด้วย Fluent ได้แล้ว:
- กำหนด
final classที่เป็นModelพร้อมตัวห่อคุณสมบัติ@IDและ@Fieldรวมถึงschema - สร้างตารางผ่าน
AsyncMigrationและเรียกใช้ด้วยautoMigrate() - ดำเนินการ CRUD ด้วย
save,query(on:),find,updateและdelete - จำลองความสัมพันธ์ของโมเดลด้วย
@Parent,@Childและ@Siblingsพร้อมโหลดล่วงหน้าผ่าน.with
คำถามที่พบบ่อย
บทเรียน “ORM และโมเดลแบบ Fluent” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ORM และโมเดลแบบ Fluent” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ORM และโมเดลแบบ Fluent”
บันทึกข้อมูลด้วย Fluent ORM ของ Vapor คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ORM และโมเดลแบบ Fluent” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดเส้นทางและจัดการคำขอ
- การเข้ารหัสเนื้อหาและ JSON
- ORM และโมเดลแบบ Fluent
- มิดเดิลแวร์และการยืนยันตัวตน