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 VaporDefiniowanie 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: IntKompletny 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 classimplementującąModel, z wrapperami właściwości@IDi@Fieldoraz właściwościąschema. - Tworzyć tabele za pomocą
AsyncMigrationi uruchamiać migracje przezautoMigrate(). - Wykonywać operacje CRUD za pomocą
save,query(on:),find,updateidelete. - Modelować relacje za pomocą
@Parent,@Childi@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
- Routing i obsługa żądań
- Kodowanie treści i JSON
- Fluent ORM i modele
- Middleware i uwierzytelnianie