蒸气中的枢轴协议

问题描述:

如何使用相同的对象制作枢轴? 我有这样的尝试,但得到一个MySQL错误:蒸气中的枢轴协议

final class UserParent: Model, PivotProtocol { 
    var storage = Storage() 

    typealias Left = User 
    typealias Right = User 

    static var leftIdKey: String = "user_id_parent" 
    static var rightIdKey: String = "user_id_child" 

    init(row: Row) throws { } 

    func makeRow() throws -> Row { 
     let row = Row() 
     return row 
    } 

} 

//MARK: - Preparation 
extension UserParent: Preparation { 
    static func prepare(_ database: Database) throws { 
     try database.create(self, closure: { builder in 
      builder.id() 
      builder.int("user_id_parent") 
      builder.int("user_id_child") 
     }) 
    } 

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

,然后我有这个我的用户对象

var users: Siblings<User, User, UserParent> { 
    return siblings() 
} 

上,但我得到这个MySQL错误

[MySQL Error: Unknown column 'user_parents.user_id' in 'where clause'] 
+1

在此PR中添加了创建自定义键的功能:https://github.com/vapor/fluent/pull/251请在此处查看测试:https://github.com/vapor /流利/拉/ 251 /文件#DIFF-b6a7113811c9efca25dcc7e0067dafaaR2 – tanner0101

要完成tanner0101的回答:

您的模型是正确的,但是您的Siblings实现也必须指定自定义键。

var parentUsers: Siblings<User, User, UserParent> { 
    return siblings(localIdKey: "user_id_child", foreignIdKey: "user_id_parent") 
} 
var childUsers: Siblings<User, User, UserParent> { 
    return siblings(localIdKey: "user_id_parent", foreignIdKey: "user_id_child") 
}