0Pricing
Swift Academy · Leçon

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 Vapor

Dé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: Int

Un 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 class Model avec les wrappers de propriété @ID et @Field, ainsi qu’un schema.
  • Créez des tables avec AsyncMigration et exécutez-les avec autoMigrate().
  • Effectuez les opérations CRUD avec save, query(on:), find, update et delete.
  • Modélisez les relations avec @Parent, @Child et @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

  1. Routage et gestion des requêtes
  2. Encodage du contenu et du JSON
  3. ORM Fluent et modèles
  4. Intergiciels et authentification
← Retour à Swift Academy