knexjs使用事务从父/子表中删除行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了knexjs使用事务从父/子表中删除行相关的知识,希望对你有一定的参考价值。
我正在使用knexjs从表中删除一行。此表在另一个表中引用了行,因此我需要先删除这些子行以删除父行。我想使用一个事务,以便在父删除失败时我可以回滚子删除。
这是我的代码,但它似乎挂在第二个查询:
return Bookshelf.knex.transaction((t : any) => {
return Bookshelf.knex('user_patient_groups')
.transacting(t)
.del()
.where('patient_group_id', groupID)
.then(() => {
return Bookshelf.knex('patient_groups')
.del()
.where('patient_group_id', groupID)
.then(t.commit)
.catch(t.rollback);
});
});
谁能看出我在这里做错了什么? knexjs文档不是很广泛。
答案
你应该省略打电话
.then(t.commit)
.catch(t.rollback)
如果在交易回调中返回承诺,knex
将为您管理您的交易。因此,使用您的.catch
,您可以抑制通过承诺链传递的错误,并且事务会看到履行承诺。
否则,不要从您的交易中退回承诺(删除return
s)并离开commit
和rollback
。
以上是关于knexjs使用事务从父/子表中删除行的主要内容,如果未能解决你的问题,请参考以下文章