【问题标题】:What does a `Model` class look like that has a relation?一个“模型”类看起来有什么关系?
【发布时间】:2017-04-11 01:28:36
【问题描述】:

使用Vapor 我想存储与孩子的关系。我还没有找到任何类应该是什么样子的例子,我只是在猜测该怎么做。谁能提供一个与其他Model 对象列表有关系的类的示例?

import Vapor
import Fluent
import Foundation

final class Store: Model {

    // MARK: - Model
    var id: Node?
    var exists: Bool = false
    var locationIDs: [Node] = [] // No idea if this is right

    var name: String

    init(name: String, locationIDs: [Node] = []) {
        self.id = nil
        self.name = name
        self.locationIDs = locationIDs
    }

    init(node: Node, in context: Context) throws {
        id = try node.extract("id")
        name = try node.extract("name")
//      ???
    }

    func makeNode(context: Context) throws -> Node {
        return try Node(node: [
            "id": id,
            "name": name
//          ???
        ])
    }

    static func prepare(_ database: Database) throws {
        try database.create( "stores" ) { creator in
            creator.id()
            creator.string("name")
//            creator.id("", optional: false) // ???
        }
    }

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

}

【问题讨论】:

  • 是的,我做到了,它没有举例说明该属性在“孩子”中的外观。我想我找到了问题,它在大写字母之间添加了一个 _。有点奇怪......但现在我的改变对我有用。我会把这个问题做得更好一点,并添加我的解决方案。

标签: swift postgresql fluent vapor


【解决方案1】:

这是我对用户和组关系的实现。一个用户属于一个组,组有很多用户,所以一个简单的 1 -> Many 关系。

final public class User: Model {
  public var id: Int?
  var emailAddress: String
  var username: String
  var groupId: Int

}

extension User {
  var group: Parent<User, Group> {
    return parent(\.groupId)
  }
}


final public class Group: Model {
   public var id: Int?
   var name: String
}

extension Group {
   var users: Children<Group, Users> {
      return children(\.groupId)
   }
}

许多 许多相似,但在关系中间使用数据透视表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2013-02-23
    • 2015-01-31
    • 2011-10-18
    • 2013-03-25
    • 2015-03-22
    相关资源
    最近更新 更多