【发布时间】:2019-02-13 14:16:44
【问题描述】:
我刚开始编程和vapor,遇到以下查询问题。
当用户向 /api/trip/new 发出创建新行程的请求时,我想从数据库中检索第一个司机并将他们的 ID 分配给 Trip 对象。然后我想将行程和行程请求都保存在数据库中。
我有以下代码:
func newTripHandler(_ req: Request, data: TripRequestCreateData) throws -> Future<TripRequest> {
let passenger = try req.requireAuthenticated(Passenger.self)
let tripRequest = try TripRequest(pickupLat: data.pickupLat,
pickupLng: data.pickupLng,
destLat: data.destLat,
destLng: data.destLng,
pickupAddress: data.pickupAddress,
destAddress: data.destAddress,
passengerId: passenger.requireID())
//Passenger's location
let lat = tripRequest.pickupLat
let lng = tripRequest.pickupLng
//Passenger's destination
let toLat = tripRequest.destLat
let toLng = tripRequest.destLng
let trip = Trip(passengerId: tripRequest.passengerId!,
pickupLat: lat,
pickupLng: lng,
destLat: toLat,
destLng: toLng,
pickupAddress: tripRequest.pickupAddress,
destAddress: tripRequest.destAddress)
let driver = Driver.query(on: req).first().unwrap(or: Abort(.notFound))
let driverId = driver.map(to: Driver.self) { driver in
return driver.id
}
trip.driverId = driverId
print(trip)
return tripRequest.save(on: req)
}
struct TripRequestCreateData: Content {
let pickupLat: Double
let pickupLng: Double
let destLat: Double
let destLng: Double
let pickupAddress: String
let destAddress: String
}
我不确定如何保存两个模型以及如何从数据库中正确检索驱动程序。 driverId 常量的类型是 EventLoopFuture 而不是 Driver,因此我无法将 ID 分配给行程的 driverId 属性。
如何调整我的代码来实现这一点?
【问题讨论】:
标签: swift vapor fluent-orm