我正在Xcode 11.2
使用Vapor3
和Fluent
with编写一个后端应用程序SQLite
。我有一条POST
请求更新 Table1 中记录的路由,但在保存记录之前,我需要从另一个表中提取值,其中的键位于我传入的一个字段中。我在卡住是从另一个表访问该数据。
到目前为止我所拥有的:
员工表
final class Staff: Content, SQLiteUUIDModel, Migration, Parameter {
var id: UUID?
var staffID: String (value that's in the other table to match)
var value1: Int (one of the values I'm trying to fetch)
var value2: Int (another value I'm trying to fetch)
...(additional variables and Init
作业表
final class Assignments: Content, SQLiteUUIDModel, Migration, Parameter {
var id: UUID?
var staffID: String
...(additional variables and Init
用于更新现有分配的传入 POST 请求的路由:
router.post("update", Assignments.parameter) { req -> Future<Assignments> in
return try req.parameters.next(Assignments.self).flatMap { Assignment in
return try req.content.decode(Assignments.self).flatMap { updatedAssignment in
(Code where I perform calculations on the incoming 'Assignment' and save to 'updatedAssignment' before calling:)
return WorkOrder.save(on: req)
我的路线有效,传入的数据被修改并写入 SQLite 数据库,但是有几个字段我需要执行计算或设置为存储在 Staff 表中的值。IE:
editedAssignment.variable = (variable) * (value1 from staff table for matching staffID)
editedAssignment.variable = (value2 from staff table for matching staffID)
到目前为止我尝试过的
let staffData = Staff.query(on: req).filter(\.staffID == staffID).all() before the calculations
(adding as a Future as:)
router.post(...) { req -> Future<Staff> in return try Staff.query(on: req).filter ...(rest of query)
-- 这个方法抛出了整个请求,传入请求的值就丢失了。
理想情况下,如果我可以在计算中调用查询并保存为字典,那将是理想的,我似乎无法“弄清楚”。