我目前正在努力用蒸汽/流利做一个 upsert。我有一个这样的模型:
struct DeviceToken: PostgreSQLModel {
var id: Int?
var token: String
var updatedAt: Date = Date()
init(id: Int? = nil, token: String, updatedAt: Date = Date()) {
self.id = id
self.token = token
self.updatedAt = updatedAt
}
}
struct Account: PostgreSQLModel {
var id: Int?
let username: String
let service: String
...
let deviceTokenId: DeviceToken.ID
init(id: Int? = nil, service: String, username: String, ..., deviceTokenId: DeviceToken.ID) {
self.id = id
self.username = username
....
self.deviceTokenId = deviceTokenId
}
}
从客户端类似
{
"deviceToken": {
"token": "ab123",
"updatedAt": "01-01-2019 10:10:10"
},
"account": {
"username": "user1",
"service": "some service"
}
}
是发送。
如果新模型不存在,我想做的是插入新模型,否则更新它们。我看到了该create(orUpdate:)
方法,但是只有在 id 相同时才会更新(在我的理解中)。由于客户端不发送 id 我不太确定如何处理这个。
我也无法解码模型,因为帐户是在没有发送的情况下发送的deviceTokenId
,因此解码将失败。我想我可以通过覆盖NodeCovertible
或使用两种不同的模型(一个用于解码没有 id 的 json 和上面的实际模型)来解决后一个问题。然而,第一个问题仍然存在。
我真正想做的是:
如果带有令牌的条目已经存在,则更新 DeviceToken 否则创建它
如果用户名和服务组合的帐户已经存在,则更新其用户名、服务和 deviceTokenId,否则创建它。DeviceTokenId 是从 1 返回的 id。
你有机会在这里帮我吗?