如何以有效的方式在关系中获得表中的最后一个元素?



假设我有一个名为user的实体,每个用户有许多accounts,我想获得插入到特定用户中的最后一个帐户。

我尝试了不同的解决方案,但我没有找到一个更好的,我必须获得一个用户,然后使用loadItems方法与orderBydesc,然后获得第一个元素,但我不想从DB加载所有帐户。

我就是这么做的

const user = await this.repository.find({id})
const accounts = await user.accounts.loadItems({orderBy: {['column']: 'DESC'}})
return accounts[0];

这绝对不是一个好的解决方案,因为我首先从数据库加载所有项目,还有其他方法吗?我还是个初来乍到的人,如果有什么建议,我将不胜感激。

提前感谢。

有很多选择:

  • 使用em.findOne加载正确的实体(例如em.findOne(Account, { user }))
  • 使用有limit选项的user.accounts.matching: https://mikro-orm.io/docs/collections#filtering-collections
  • 如果你想为许多实体这样做,而不仅仅是一个,使用SQL子查询通过@Formula装饰器:https://mikro-orm.io/docs/defining-entities#formulas