我将Objection.js用作我的ORM,用于简单的降雨应用程序。当较低级别的表整体已更新时,我需要能够动态更新和输入一个表。为此,我需要更新整个条目,以便可以使用该数据正确更新动态更新的条目。
我将$afterUpdate
钩用于较低级别的表条目。我遇到的问题是,当我在this
挂钩函数中登录$afterUpdate
时,它仅包含要更新的条目部分的属性。我如何获得整个参赛作品?我确定我可以通过对数据库运行附加查询来获取记录,但我希望可以避免这种情况。任何帮助将不胜感激
答案 0 :(得分:1)
我认为,截至目前,您只能通过额外的查询来获得整个模型。
如果您要使用实例查询($ query)进行更新,则可以从options.old
获取其他属性。
查询:
const user = await User.query().findById(userId);
await user.$query()
.patch({ name: 'Tom Jane' })
挂钩:
$afterUpdate(opt, queryContext) {
console.log(opt.old)
}
补丁
如果不需要在挂钩中执行此操作,则可能需要使用与patch
链接的first().returning('*')
函数来在单个查询中获取整个模型,它比{{ 1}}。如文档中所述。
由于PostgreSQL(及其他一些)支持返回('*')链接,因此您实际上可以插入一行,或更新/修补/删除现有行,并将受影响的行作为在单个查询中对实例建模,从而提高了效率。有关更多信息,请参见示例。
patchAndFetchById
参考文献: