ORM Fluent et modèles
Enregistrez les données avec l’ORM Fluent de Vapor.
ORM Fluent et modèles est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
Qu’est-ce que Fluent
Fluent est l’ORM de Vapor. Il associe les classes Swift aux lignes d’une base de données et prend en charge PostgreSQL, MySQL, SQLite et MongoDB via une API unique. Vous écrivez en Swift ; Fluent écrit le SQL.
import Fluent
import VaporDéfinir un modèle
Un modèle Fluent est une final class conforme à Model et généralement à Content. Il déclare un schema (nom de table) et une propriété @ID pour la clé primaire.
final class Planet: Model, Content {
static let schema = "planets"
@ID(key: .id)
var id: UUID?
init() {}
}Le wrapper de propriété @Field
Associez une colonne stockée avec @Field. La clé correspond au nom de la colonne dans la base de données. Ajoutez une propriété pour chaque colonne que vous souhaitez conserver.
@Field(key: "name")
var name: String
@Field(key: "diameter_km")
var diameterKm: IntUn modèle complet
Les modèles ont également besoin d’un initialiseur membre par membre (en plus de l’init() vide requis) afin que vous puissiez créer des instances dans le code.
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
}
}Migrations
Une migration crée ou modifie le schéma de la base de données. Elle est conforme à AsyncMigration et implémente prepare (appliquer) et revert (annuler).
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()
}
}Enregistrer des migrations
Ajoutez les migrations à app.migrations dans votre configuration, puis exécutez-les avec app.autoMigrate() ou la commande migrate.
app.migrations.add(CreatePlanet())
try await app.autoMigrate()Enregistrer un enregistrement
Créez une instance de modèle et appelez save(on:) avec la base de données de la requête. Fluent exécute un INSERT et renseigne l’identifiant généré.
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
}Interroger des enregistrements
Utilisez Model.query(on:) pour construire des requêtes de manière fluide. .all() renvoie chaque ligne ; enchaînez les filtres et les tris selon vos besoins.
app.get("planets") { req async throws -> [Planet] in
try await Planet.query(on: req.db).all()
}Filtrer et rechercher par identifiant
find(_:on:) récupère un enregistrement par sa clé primaire et renvoie une valeur facultative. filter restreint les résultats selon les valeurs des colonnes.
let earth = try await Planet.query(on: req.db)
.filter(\.$name == "Earth")
.first()
let byId = try await Planet.find(someUUID, on: req.db)Mettre à jour et supprimer
Modifiez les propriétés d’un modèle récupéré et appelez update(on:), ou supprimez-le avec delete(on:). Ces deux opérations s’exécutent de manière asynchrone sur la base de données.
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)
}Relations
Fluent gère les relations entre modèles avec des wrappers de propriété : @Parent et @Child pour les relations un-à-un ou un-à-plusieurs, et @Siblings pour les relations plusieurs-à-plusieurs. Ils définissent des clés étrangères et permettent le chargement anticipé avec .with(...).
@Parent(key: "star_id")
var star: Star
// query eagerly loading the parent
Planet.query(on: req.db).with(\.$star).all()Vérification rapide : Fluent
Vérifiez votre compréhension de l’ORM.
Récapitulatif : ORM Fluent et modèles
Vous savez maintenant conserver des données avec Fluent :
- Définissez une
final classModelavec les wrappers de propriété@IDet@Field, ainsi qu’unschema. - Créez des tables avec
AsyncMigrationet exécutez-les avecautoMigrate(). - Effectuez les opérations CRUD avec
save,query(on:),find,updateetdelete. - Modélisez les relations avec
@Parent,@Childet@Siblings, avec chargement anticipé via.with.
Questions Fréquemment Posées
La leçon « ORM Fluent et modèles » est-elle gratuite ?
Oui — le texte complet de « ORM Fluent et modèles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « ORM Fluent et modèles » ?
Enregistrez les données avec l’ORM Fluent de Vapor. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « ORM Fluent et modèles » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Routage et gestion des requêtes
- Encodage du contenu et du JSON
- ORM Fluent et modèles
- Intergiciels et authentification