假设我有一个名为user
的实体,每个用户有许多accounts
,我想获得插入到特定用户中的最后一个帐户。
我尝试了不同的解决方案,但我没有找到一个更好的,我必须获得一个用户,然后使用loadItems
方法与orderBy
desc,然后获得第一个元素,但我不想从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