【发布时间】:2021-12-06 16:53:45
【问题描述】:
这是我执行数据库播种的代码:
func prepare(on database: Database) -> EventLoopFuture<Void> {
var citySaveResults: [EventLoopFuture<Void>] = []
return User.query(on: database).first().flatMap({ user -> EventLoopFuture<Void> in
guard let userId = user?.id else { return citySaveResults.flatten(on: database.eventLoop).transform(to: ()) }
let cities = [
City(id: UUID(), name: "London", isActive: true, createdAt: Date()),
City(id: UUID(), name: "New York", isActive: true, createdAt: Date()),
City(id: UUID(), name: "San Francisco", isActive: true, createdAt: Date()),
]
for city in cities {
city.plans.append(contentsOf: createPlans(cityId: city.id, userId: userId))
citySaveResults.append(city.save(on: database))
}
return citySaveResults.flatten(on: database.eventLoop) .transform(to: ())
})
}
但它在一行中崩溃:
city.plans.append(contentsOf: createPlans(cityId: city.id, userId: userId))
Fatal error: Children relation not eager loaded, use $ prefix to access.
谁能解释我如何使用 Eager Loading 功能来避免在这种情况下崩溃?
这是我的城市模型:
final class City: Model {
static let schema = "cities"
@ID(key: .id) var id: UUID?
@Field(key: "name") var name: String
@Field(key: "isActive") var isActive: Bool
@Children(for: \Plan.$city) var plans: [Plan]
...
}
【问题讨论】:
-
您是否要在同一个迁移中拯救孩子(计划)?
-
是的,我更新了我的问题。
标签: vapor