ORM والنماذج في Fluent
احفظ البيانات باستخدام Fluent ORM في Vapor.
ORM والنماذج في Fluent درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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نموذج متكامل
تحتاج النماذج أيضًا إلى مُهيئ memberwise (بالإضافة إلى 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 ويملأ المعرّف المُنشأ.
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:) لبناء الاستعلامات بطريقة Fluent. يعيد .all() كل صف؛ ويمكنكم تسلسل عوامل التصفية والفرز حسب الحاجة.
app.get("planets") { req async throws -> [Planet] in
try await Planet.query(on: req.db).all()
}التصفية والعثور باستخدام المعرّف
تجلب 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.
مراجعة: Fluent وORM والنماذج
يمكنكم الآن حفظ البيانات باستخدام Fluent:
- عرّفوا
final classمن نوعModelباستخدام أغلفة الخصائص@IDو@Field، وأعلنوا عنschema. - أنشئوا الجداول عبر
AsyncMigrationوشغّلوها باستخدامautoMigrate(). - نفّذوا عمليات CRUD باستخدام
saveوquery(on:)وfindوupdateوdelete. - نمذجوا العلاقات باستخدام
@Parentو@Childو@Siblings، مع التحميل المسبق عبر.with.
الأسئلة الشائعة
هل درس «ORM والنماذج في Fluent» مجاني؟
نعم — نص درس «ORM والنماذج في Fluent» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «ORM والنماذج في Fluent»؟
احفظ البيانات باستخدام Fluent ORM في Vapor. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «ORM والنماذج في Fluent»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التوجيه ومعالجة الطلبات
- ترميز المحتوى وJSON
- ORM والنماذج في Fluent
- البرمجيات الوسيطة والمصادقة