Prisma 如何仅更新 update() 中的部分模型字段

sko*_*pio 12 express prisma

我有一个 Prisma 模型,可以说有 10 个字段。考虑用户模型,包括名字、姓氏、地址、电子邮件、电话、手机、年龄等。

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

对此最好的做法是什么?我应该检查 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,
  },
})
Run Code Online (Sandbox Code Playgroud)

或者我应该检查 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,
})
Run Code Online (Sandbox Code Playgroud)

Tas*_*mam 17

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
  },
})
Run Code Online (Sandbox Code Playgroud)