1

Xcode 11.2とを使用しVapor3てバックエンド アプリを作成しFluentていSQLiteます。Table1 のレコードを更新するリクエストのルートがありPOSTますが、レコードを保存する前に、渡すフィールドの 1 つにあるキーを使用して、別のテーブルから値を取得する必要があります。行き詰まるのは、他のテーブルからそのデータにアクセスすることです。

私がこれまでに持っているもの:

スタッフ用テーブル

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 テーブルに格納されている値に設定する必要があるフィールドがいくつかあります。いいえ:


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)  

-- このメソッドはリクエスト全体をスローします。着信リクエストの値は失われます。

理想的には、クエリを呼び出して計算で辞書として保存できれば理想的ですが、「それを理解する」ことができないようです。

4

1 に答える 1