蒸汽4亲子关系
Vapor 4 parent child relationship
在 Vapor 4 中我创建了一个用户,它有 "gear" 这样的:
final class User: Model, Content {
init() {}
static var schema: String = "user"
@ID(key: .id)
var id: UUID?
@Field(key: "name")
var name: String?
@Children(for: \.$user)
var gear: [Gear]
}
final class Gear: Model, Content {
init() {}
static var schema: String = "gear"
@ID(key: .id)
var id: UUID?
@Parent(key: "userId")
var user: User
}
然后当我得到这些数据时我会做:
func index(req: Request) throws -> EventLoopFuture<[User]> {
return User.query(on: req.db).with(\.$gear).all()
}
相当流畅和简单。除了 ID 被强制为 UUID 而数据库中的 table 只能采用类型 "text" 所以我得到错误:
{
"error": true,
"reason": "server: operator does not exist: text = uuid (op_error)"
}
所以有人知道如何解决这个问题吗?
我想要的响应结构类似于:
{
"id": "w32423tsdg3w",
"name": "username",
"gear": [{
"id": "1"
},
{
"id": "2"
}
]
}
在这种情况下 ID
应设置为 String
@ID(key: .id, generatedBy: .user) var id: String?
在 Vapor 4 中我创建了一个用户,它有 "gear" 这样的:
final class User: Model, Content {
init() {}
static var schema: String = "user"
@ID(key: .id)
var id: UUID?
@Field(key: "name")
var name: String?
@Children(for: \.$user)
var gear: [Gear]
}
final class Gear: Model, Content {
init() {}
static var schema: String = "gear"
@ID(key: .id)
var id: UUID?
@Parent(key: "userId")
var user: User
}
然后当我得到这些数据时我会做:
func index(req: Request) throws -> EventLoopFuture<[User]> {
return User.query(on: req.db).with(\.$gear).all()
}
相当流畅和简单。除了 ID 被强制为 UUID 而数据库中的 table 只能采用类型 "text" 所以我得到错误:
{
"error": true,
"reason": "server: operator does not exist: text = uuid (op_error)"
}
所以有人知道如何解决这个问题吗?
我想要的响应结构类似于:
{
"id": "w32423tsdg3w",
"name": "username",
"gear": [{
"id": "1"
},
{
"id": "2"
}
]
}
在这种情况下 ID
应设置为 String
@ID(key: .id, generatedBy: .user) var id: String?