Я пытался реализовать простую транзакцию в 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.
Я что-то здесь упускаю?