AdonisJS - 清晰的幂等方法 - `updateOrCreateMany()` 问题

问题描述 投票:0回答:1

在执行

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

我很乐意得到你的帮助🙏

非常感谢

javascript node.js typescript adonis.js lucid
1个回答
0
投票

我建议您在事务中插入

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 });
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.