2 回答
TA贡献1946条经验 获得超4个赞
我是这样做的,所以它至少可以用于开发目的:
@AfterLoad()
async getStatus() {
const innerSelect = getRepository(HubStatus)
.createQueryBuilder()
.select('id')
.where('HubStatus.hub.id = :id')
.orderBy('id', "DESC")
.limit(1);
const query = createQueryBuilder(Hub)
.select('somecolumn')
.leftJoin(`Hub.statusLog`, "statusLog", `statusLog.id = (${innerSelect.getSql()})`, { id: this.id })
this.lastStatus = (await query.getRawOne()).somecolumn;
}
但问题仍然存在 - 可能会有数百万个条目HubStatus,如果认为ORDER BY+LIMIT 1解决方案在这种情况下不会表现良好。
TA贡献1824条经验 获得超6个赞
另一种方法是在连接条件中使用leftJoinAndMapOne查询构建器方法和NOT EXISTSSQL 条件来测试以后的实体:
const query = createQueryBuilder(Hub)
.leftJoinAndMapOne('Hub.statusLog', HubStatus, 'statusLog',
`Hub.id = statusLog.hubId AND NOT EXISTS (
SELECT 1 FROM hub-status hs1 WHERE hs1.hubId = Hub.id AND hs1.id > statusLog.id)`,
).getMany()
添加回答
举报