ORM y modelos con Fluent
Guarde datos con el ORM Fluent de Vapor.
ORM y modelos con Fluent es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué es Fluent?
Fluent es el ORM de Vapor. Asigna clases de Swift a filas de una base de datos y admite PostgreSQL, MySQL, SQLite y MongoDB mediante una única API. Usted escribe Swift; Fluent escribe SQL.
import Fluent
import VaporDefinición de un modelo
Un modelo de Fluent es una final class que conforma a Model y normalmente a Content. Declara un schema (nombre de la tabla) y una propiedad @ID para la clave principal.
final class Planet: Model, Content {
static let schema = "planets"
@ID(key: .id)
var id: UUID?
init() {}
}El envoltorio de propiedad @Field
Asigne una columna almacenada mediante @Field. La clave es el nombre de la columna en la base de datos. Añada una propiedad por cada columna que quiera conservar.
@Field(key: "name")
var name: String
@Field(key: "diameter_km")
var diameterKm: IntUn modelo completo
Los modelos también necesitan un inicializador miembro a miembro (además del init() vacío obligatorio) para que pueda crear instancias en el código.
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
}
}Migraciones
Una migración crea o modifica el esquema de la base de datos. Conforma a AsyncMigration e implementa prepare (aplicar) y revert (deshacer).
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()
}
}Registro de migraciones
Añada las migraciones a app.migrations en su configuración y ejecútelas con app.autoMigrate() o con el comando migrate.
app.migrations.add(CreatePlanet())
try await app.autoMigrate()Guardado de un registro
Cree una instancia del modelo y llame a save(on:) con la base de datos de la solicitud. Fluent ejecuta un INSERT y completa el id generado.
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
}Consulta de registros
Use Model.query(on:) para construir consultas de forma fluida. .all() devuelve todas las filas; encadene filtros y ordenamientos según sea necesario.
app.get("planets") { req async throws -> [Planet] in
try await Planet.query(on: req.db).all()
}Filtrado y búsqueda por ID
find(_:on:) busca por clave principal y devuelve un valor opcional. filter reduce los resultados según los valores de las columnas.
let earth = try await Planet.query(on: req.db)
.filter(\.$name == "Earth")
.first()
let byId = try await Planet.find(someUUID, on: req.db)Actualización y eliminación
Modifique las propiedades de un modelo obtenido y llame a update(on:), o elimínelo con delete(on:). Ambas operaciones se ejecutan de forma asíncrona en la base de datos.
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)
}Relaciones
Fluent modela relaciones mediante envoltorios de propiedades: @Parent y @Child para relaciones uno a uno o uno a varios, y @Siblings para relaciones de varios a varios. Definen claves externas y permiten la carga anticipada con .with(...).
@Parent(key: "star_id")
var star: Star
// query eagerly loading the parent
Planet.query(on: req.db).with(\.$star).all()Comprobación rápida: Fluent
Compruebe sus conocimientos sobre ORM.
Resumen: ORM y modelos de Fluent
Ahora puede conservar datos con Fluent:
- Defina una
final classModelcon los envoltorios de propiedades@IDy@Field, además de unschema. - Cree tablas mediante
AsyncMigrationy ejecútelas conautoMigrate(). - Realice operaciones CRUD con
save,query(on:),find,updateydelete. - Modele relaciones con
@Parent,@Childy@Siblings, y cargue datos anticipadamente mediante.with.
Preguntas frecuentes
¿La lección «ORM y modelos con Fluent» es gratis?
Sí — el texto completo de «ORM y modelos con Fluent» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «ORM y modelos con Fluent»?
Guarde datos con el ORM Fluent de Vapor. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «ORM y modelos con Fluent»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Enrutamiento y gestión de solicitudes
- Codificación de contenido y JSON
- ORM y modelos con Fluent
- Middleware y autenticación