Vapor 2.0 - Fluent入门指南(Getting Started with Fluent)

前往 Vapor 2.0 - 文档目录

Fluent提供了一种简单、简单、安全的API,用于处理持久数据。每个数据库表/集合都由一个可用于与数据交互的Model表示。Fluent支持常见的操作,如创建、读取、更新和删除模型。它还支持更高级的操作,比如连接、关联和软删除。

笔记
不要忘记将import FluentProvider(或您的其他数据库提供程序)添加到您的Swift文件的顶部。

默认情况下,Fluent自带SQLite。您可以通过SQLite快速地使用它提供的内存数据库来搭建应用程序。默认情况下,这是默认启用的。要了解更多关于配置数据库的信息,请查看可用的驱动程序(在本篇最后)。

创建一个模型(Creating a Model)

模型是数据库中Swift数据的展示。因此,它们对于大多数Fluent的api来说都是至关重要的。

让我们来看看一个简单的模型是什么样子的。

final class Pet: Model {
    var name: String
    var age: Int
    let storage = Storage()

    init(row: Row) throws {
        name = try row.get("name")
        age = try row.get("age")
    }

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func makeRow() throws -> Row {
        var row = Row()
        try row.set("name", name)
        try row.set("age", age)
        return row
    }
}

在这里,我们创建了一个简单的类宠物(Pet),名字和年龄。我们将添加一个简单的init方法来创建新的宠物对象。

储存(Storage)

storage属性允许Fluent在模型中存储额外的信息——比如模型的数据库id。

行(Row)

Row结构体表示一个数据库行。您的模型应该能够对数据库行进行解析和序列化。

解析(Parse)

下面是从数据库中解析Pet的代码。

final class Pet: Model {
    ...

    init(row: Row) throws {
        name = try row.get("name")
        age = try row.get("age")
    }
}
序列化(Serialize)

下面是将Pet序列化到数据库的代码。

final class Pet: Model {
    ...

    func makeRow() throws -> Row {
        var row = Row()
        try row.set("name", name)
        try row.set("age", age)
        return row
    }
}

准备数据库(Preparing the Database)

为了使用您的模型,您可能需要使用适当的模式来准备数据库。

准备(Preparation)

你可以通过将你的模型继承Preparation来做到这一点。

extension Pet: Preparation {
    static func prepare(_ database: Database) throws {
        try database.create(self) { pets in
            pets.id()
            pets.string("name")
            pets.int("age")
        }
    } 

    static func revert(_ database: Database) throws {
        try database.delete(self)
    }
}

在这里,我们创建了一个简单的表,看起来如下:

id name age
string int

添加到Droplet(Add to Droplet)

现在,您可以将模型添加到配置的准备中,以便在应用程序启动时准备好数据库。

import Vapor
import FluentProvider

let config = try Config()
config.preparations.append(Pet.self)
let drop = try Droplet(config)

...

使用模型(Using Models)

现在我们已经创建了模型并准备好了数据库,我们可以使用它来保存和从数据库中获取数据。

保存(Save)

要保存一个模型,请调用.save()。将自动创建模型的新标识符。

let dog = Pet(name: "Spud", age: 5)
try dog.save()
print(dog.id) // the newly saved pet's id

查找(Find)

您可以使用它的ID从数据库中获取一个模型。

guard let dog = try Pet.find(42) else {
    throw Abort.notFound
}

print(dog.name) // the name of the dog with id 42

过滤器(Filter)

您还可以使用过滤器搜索模型。

let dogs = try Pet.makeQuery().filter("age", .greaterThan, 2).all()
print(dogs) // all dogs older than 2

驱动(Drivers)

查看数据库(database)部分,了解更多关于不同数据库驱动程序的信息,您可以使用Fluent的数据库驱动程序。

你可能感兴趣的:(Vapor 2.0 - Fluent入门指南(Getting Started with Fluent))