簡體   English   中英

Loopback4 中包含記錄的限制

[英]Limit for included records in Loopback4

我想查詢練習 model 對象並包括相關對象(關系:athletExerciseLogsExercise)。 但我只需要 1 個相關的 object,這就是為什么我在包含 scope 中添加“限制:1”:

exerciseController.find({
    include: [{
        relation: "athletExerciseLogsExercise",
        scope: {
            where: {
                userId: id
            },
            order: ['date DESC'],
            limit: 1
        }
    }, ]
});

Model

export class Exercise extends Entity {
  ...
  @hasMany(() => AthletExerciseLog, {keyTo: 'exerciseId'})
  athletExerciseLogsExercise?: AthletExerciseLog[];
  ...
}

SQL(來自調試)

SELECT
  "id",
  "userid",
  "exerciseid",
  "date"
  ...
FROM
  "public"."athletexerciselog"
WHERE
  "userid" = '65b9b7110230'
  AND "exerciseid" IN (
    'd67503d511bb',
    '46d156a58aee'
  )
ORDER BY  "date" DESC
LIMIT 1

問題:SQL 結果僅包含一個“exerciseid”= 'd67503d511bb' 的 1 條記錄

問題:如何從“athletexerciselog”中為每個“exerciseid”接收 1 條記錄?

我找到了以下解決方案,這可能是開銷,但我找不到其他方法......

1 - 創建數據庫視圖:select 每個用戶 ID練習ID 僅 1 條(最后一條)記錄

CREATE VIEW "v_athletexerciselog" AS  
  SELECT q.*
  FROM athletexerciselog q
  WHERE (
        q.id IN ( 
          SELECT max(i.id) AS max
           FROM athletexerciselog i
          WHERE (i.event IS NULL)
          GROUP BY i.userid, i.exerciseid
        )
  )

2 - 創建一個新的 LB4 Model和存儲庫擴展原始 model 自定義表名稱(視圖名稱)

@model({
  settings: {
    postgresql: {schema: 'public', table: 'v_athletexerciselog'}, // custom names
  },
})
export class VAthletExerciseLog extends AthletExerciseLog {
  constructor(data?: Partial<VAthletExerciseLog>) {
    super(data);
  }
}

3 - 將練習 model和存儲庫中的相關 model 名稱更改為 VAthletExerciseLog(新)

export class Exercise extends Entity {
  ...
  @hasMany(() => VAthletExerciseLog, {keyTo: 'exerciseId'})
  athletExerciseLogsExercise?: VAthletExerciseLog[];
  ...
}

4 - 從查詢中刪除“訂單”和“限制”:

exercise.find({
    include: [{
        relation: "athletExerciseLogsExercise",
        scope: {
            where: {
                userId: id
            },
            //order: ['date DESC'],
            //limit: 1
        }
    }, ]
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM