美文网首页
Vapor 2.0 - Fluent入门指南(Getting S

Vapor 2.0 - Fluent入门指南(Getting S

作者: 韩云智VL | 来源:发表于2017-08-09 14:53 被阅读0次

    前往 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
    <database id type> 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 S

          本文链接:https://www.haomeiwen.com/subject/zpufrxtx.html