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

Posted

技术标签:

【中文标题】Prisma 如何仅更新 update() 中的某些模型字段【英文标题】:Prisma how can I update only some of the models fields in update() 【发布时间】:2021-11-30 04:54:34 【问题描述】:

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

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

最好的做法是什么。我应该检查所有字段都在 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,
)

【问题讨论】:

【参考方案1】:

undefined 属性在 Prisma 中用于完成您想要实现的目标。基本上,当一个字段被分配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
  ,
)

【讨论】:

以上是关于Prisma 如何仅更新 update() 中的某些模型字段的主要内容,如果未能解决你的问题,请参考以下文章

更新 Prisma 中的多对多关系

mysql 如何让null更新成0

Prisma 更新与 WHERE 属性中的关系

我想更新sql 表1中的某一列数值,这个数值是从另外一个表中取出来的。语句怎么写

从 Prisma2 中的辅助表中获取数据

使用 prisma,如何从嵌套写入中访问新创建的记录(先更新,然后在其中创建)