在执行
updateOrCreateMany()
时,我需要了解数据库中单个属性上的 500 错误,但在执行 updateOrCreate()
时我没有得到。
这是我的代码
updateOrCreateMany()
:
const payload = [
{
githubId: anotherId,
name: myName,
status: myStatus,
},
...
]
// Here, githubId is a unique string in DB
await MyTable.updateOrCreateMany('githubId', payload)
这段代码给了我以下错误: -->
duplicate key value violates unique constraint "my_table_github_id_unique"
在我看来,
updateOrCreateMany()
应该自己处理这个问题。
使用
updateOrCreate()
一切都能正常工作,但代码的可维护性较差:
const payload = [
{
githubId: anotherId,
name: myName,
status: myStatus,
},
...
]
payload.forEach(async (item: any) => {
const searchPayload = { githubId: item.githubId }
await MyTable.updateOrCreate(searchPayload, item)
})
--> 就像一个魅力,但向数据库提出了更多请求:
我遵循了 Lucid 文档的
idempotent-methods
:https://lucid.adonisjs.com/docs/crud-operations#idempot-methods
我很乐意得到你的帮助🙏
非常感谢
我建议您在事务中插入
for
循环,这样您与数据库只有一个连接,以获得更好的性能。
const Database = use('Database');
await Database.transaction(async (trx) => {
for (const item of payload) {
const searchPayload = { githubId: item.githubId };
await MyTable.updateOrCreate(searchPayload, item, { client: trx });
}
});