0Pricing
Swift Academy · Lekcja

Fluent ORM i modele

Trwałe przechowywanie danych za pomocą Fluent ORM platformy Vapor.

Fluent ORM i modele to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Czym jest Fluent?

Fluent to ORM frameworka Vapor. Mapuje klasy Swift na wiersze bazy danych i obsługuje PostgreSQL, MySQL, SQLite oraz MongoDB za pośrednictwem jednego API. Państwo piszą kod Swift, a Fluent tworzy zapytania SQL.

import Fluent
import Vapor

Definiowanie modelu

Model Fluent to final class implementująca Model i zazwyczaj także Content. Deklaruje ona właściwość schema (nazwę tabeli) oraz właściwość @ID dla klucza głównego.

final class Planet: Model, Content {
    static let schema = "planets"

    @ID(key: .id)
    var id: UUID?

    init() {}
}

Wrapper właściwości @Field

Mapujcie Państwo przechowywaną kolumnę za pomocą @Field. Klucz jest nazwą kolumny w bazie danych. Dodajcie po jednej właściwości dla każdej kolumny, którą chcecie utrwalać.

@Field(key: "name")
var name: String

@Field(key: "diameter_km")
var diameterKm: Int

Kompletny model

Modele potrzebują także inicjalizatora memberwise (oprócz wymaganego pustego init()), aby można było tworzyć ich instancje w kodzie.

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
    }
}

Migracje

Migracja tworzy schemat bazy danych lub go modyfikuje. Implementuje AsyncMigration oraz zawiera metody prepare (zastosowanie) i revert (cofnięcie).

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()
    }
}

Rejestrowanie migracji

Dodajcie Państwo migracje do app.migrations w konfiguracji, a następnie uruchamiajcie je za pomocą app.autoMigrate() lub polecenia migrate.

app.migrations.add(CreatePlanet())
try await app.autoMigrate()

Zapisywanie rekordu

Utwórzcie Państwo instancję modelu i wywołajcie save(on:), przekazując bazę danych żądania. Fluent wykona operację INSERT i uzupełni wygenerowane 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
}

Wyszukiwanie rekordów

Użyjcie Państwo Model.query(on:), aby płynnie budować zapytania. .all() zwraca każdy wiersz; w razie potrzeby można łączyć filtrowanie i sortowanie.

app.get("planets") { req async throws -> [Planet] in
    try await Planet.query(on: req.db).all()
}

Filtrowanie i wyszukiwanie po identyfikatorze

find(_:on:) pobiera rekord według klucza głównego i zwraca wartość opcjonalną. filter zawęża wyniki na podstawie wartości kolumn.

let earth = try await Planet.query(on: req.db)
    .filter(\.$name == "Earth")
    .first()

let byId = try await Planet.find(someUUID, on: req.db)

Aktualizowanie i usuwanie

Zmieńcie Państwo właściwości pobranego modelu i wywołajcie update(on:) albo usuńcie go za pomocą delete(on:). Obie operacje są wykonywane asynchronicznie w bazie danych.

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)
}

Relacje

Fluent modeluje relacje za pomocą wrapperów właściwości: @Parent i @Child dla relacji jeden-do-jednego i jeden-do-wielu oraz @Siblings dla relacji wiele-do-wielu. Definiują one klucze obce i umożliwiają eager loading za pomocą .with(...).

@Parent(key: "star_id")
var star: Star

// query eagerly loading the parent
Planet.query(on: req.db).with(\.$star).all()

Szybki test: Fluent

Sprawdźcie Państwo swoją wiedzę o ORM.

Podsumowanie: ORM Fluent i modele

Mogą już Państwo utrwalać dane za pomocą Fluent:

  • Definiować final class implementującą Model, z wrapperami właściwości @ID i @Field oraz właściwością schema.
  • Tworzyć tabele za pomocą AsyncMigration i uruchamiać migracje przez autoMigrate().
  • Wykonywać operacje CRUD za pomocą save, query(on:), find, update i delete.
  • Modelować relacje za pomocą @Parent, @Child i @Siblings, korzystając z eager loading przez .with.

Często zadawane pytania

Czy lekcja „Fluent ORM i modele” jest bezpłatna?

Tak — pełny tekst „Fluent ORM i modele” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Fluent ORM i modele”?

Trwałe przechowywanie danych za pomocą Fluent ORM platformy Vapor. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Fluent ORM i modele”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Routing i obsługa żądań
  2. Kodowanie treści i JSON
  3. Fluent ORM i modele
  4. Middleware i uwierzytelnianie
← Powrót do Swift Academy