【发布时间】:2019-06-20 01:11:48
【问题描述】:
我一直在尝试在 Adonis 中实现一个简单的事务。
场景是我有一个表,它有一个名为 name 的唯一字段,并且想要在 name 中的一项存在时回滚多个创建查询的事务。
const Product = use('App/Models/Product')
const Database = use('Database')
const data = [
{
name: 'name1'
},
{
name: 'name2'
},
{
name: 'name3'
},
{
name: 'name4'
}
]
const trx = await Database.beginTransaction()
try {
await Product.createMany(data, trx)
await trx.commit()
return response.json({
success: true
})
} catch (e) {
await trx.rollback()
return response.json({
success: false
})
}
在上面的代码中,产品 name2、name3、name4 存在,而 name1 不存在。所以现在我们假设当它开始创建name2时,它会抛出一个错误并回滚事务。
但它没有。 name1 仍然被插入并且没有回滚。
也试过了
try {
await Database.transaction(async (trx) => {
await trx.insert(data).into('products')
});
} catch (e) {}
但得到了相同的输出。
顺便说一下,我用的是mysql 5.5。
我错过了什么吗?
【问题讨论】:
-
一定要发
console.error(e)看看有没有错误
标签: javascript knex.js adonis.js