[英]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.