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

Prisma how can I update only some of the models fields in update()

我有一个 Prisma 模型,假设有 10 个字段。 考虑具有名字、姓氏、地址、电子邮件、phone、手机、年龄等的用户模型

我正在尝试为此编写一个更新方法,其中我大多数时候只想更新部分或仅更新其中的一个字段。不是整个用户。如果该字段未随请求一起发送,我想保留数据库中的值。

最佳做法是什么。我应该检查所有字段都在 req 对象中吗? 我怎么能为 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,
})

Prisma 中使用 undefined 属性 来完成您想要实现的目标。基本上,当一个字段被分配 undefined 时,它意味着 忽略它并且对该字段不做任何事情 。您可以在文档中有关 null and undefined 的文章中了解更多相关信息。

这就是您的更新查询的样子。

// assuming email, firstname and address fields exist in your prisma schema. 

const updateUser = await prisma.user.update({
  where: {
    email: 'viola@prisma.io',
  },
  data: {
    firstname: req.firstname || undefined, // if req.firstname is falsy, then return undefined, otherwise return it's value. 
    email: req.email || undefined, 
    address: req.address || undefined
  },
})