Vapor
Fluent
问题。我有以下代码将User
保存为Postgres
。
User
@Parent(key: FieldKeys.profile) var profile: Profile
let profile = User.Profile()
try await profile.save(on: request.db)
if let profileID = try await User.Profile.query(on: request.db).all().last?.id {
user.$profile.id = profileID; print("Profile created with ID=(profileID)")
}
try await user.save(on: request.db)
我担心的是,另一个请求可能同时出现,并在Profile表中创建一个条目,其id
将作为最后一个而不是前一个条目的id
返回。
是否有保证的方法来创建用户配置文件关系?
Vapor能够创建事务,因此您可以确定不会有任何干预。试试类似的东西:
try await request.db.transaction { database in
let user = try await User.query...
let profile = Profile()
try await profile.save(on: database)
user.$profile.id = profile.id
try await user.save(on: database)
}
在Fluent中保存模型时,会根据查询中返回的数据为您填充ID。所以你可以写
let profile = User.Profile()
try await profile.save(on: request.db)
let profileID = try profile.requireID()
user.$profile.id = profileID
try await user.save(on: request.db)
您也可以使用Fluent 的attach
助手之一