Prisma如何在update()中仅更新某些模型字段?

11

我有一个Prisma模型,假设有10个字段。 比如User模型,拥有firstname、lastname、address、e-mail、phone、mobile、age等。

我正在尝试编写一个更新方法,大多数情况下只想更新某个或仅1个字段,而不是整个用户。如果请求中没有发送该字段,则希望保留数据库中的值。

这种情况最佳实践是什么?我应该检查所有字段是否在请求对象中吗? 我该如何为Prisma编写这个方法?

以下是我想要它工作的示例:

req = {firstname: 'Bob', email: 'bob@bob.bob', etc}

const updateUser = await prisma.user.update({
  where: {
    email: 'viola@prisma.io',
  },
  data: {
    req.firstname ? (email: req.firstname) : null,
    req.email ? (email: req.email) : null,
    req.address? (email: req.address) : null,
  },
})

我应该检查req中是否存在值,并构建10个版本的数据对象吗:

let customDataObject = {}
if (req.firstname) {
   customDataObject.firstname = req.firstname
}
if (req.email) {
   customDataObject.email= req.email
}

const updateUser = await prisma.user.update({
  where: {
    email: 'viola@prisma.io',
  },
  data: customDataObject,
})
1个回答

13

在 Prisma 中,undefined 属性用于实现你想要的效果。

基本上,当一个字段被赋值为 undefined 时,意味着忽略此字段并不执行任何操作

你可以在文档中关于 nullundefined 的文章中了解更多信息。

以下是你的更新查询的样例:

// Assuming email, firstname and address fields exist in your prisma schema. 
const updateUser = await prisma.user.update({
  where: {
    email: 'viola@prisma.io',
  },
  data: {
    // If req.firstname is falsy, then return undefined, otherwise return it's value
    firstname: req.firstname || undefined,
    email: req.email || undefined, 
    address: req.address || undefined
  },
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接