【问题标题】:How to update many-to-one relation?如何更新多对一关系?
【发布时间】:2022-01-23 00:06:37
【问题描述】:

我的架构是这样的

model Article {
  id          String  @id
  title        String
  isPublished Boolean @default(false)

  comments Comment[]
}

model Comment {
  id    String @id
  content  String
  articleId String

  article Article @relation(fields: [articleId], references: [id])
}

我正在像这样使用upsert

prisma.article.upsert({
where: {id},
create: {// create code here},
update: {
comments: {createOrConnect: [{...}]}
}
})

但删除评论时,此代码不起作用。如我所见,代码没有任何disconnect

想删除断线的评论,不知道怎么删除。

所以我有两个问题:

  1. 如何在断开连接时删除记录
  2. Prisma 是否会自动检测已删除的 cmets,因为它们不再位于文章 cmets 数组中?如果没有,检测到这一点的最佳做法是什么?

【问题讨论】:

    标签: prisma prisma2


    【解决方案1】:

    你可以先删除cmets:

    prisma.comment.deleteMany({ where: { articleId: id } })
    

    由于 ON DELETE CASCADE,它会自动从文章中删除所有 cmets

    我假设你使用的是 mysql 或 postgres

    【讨论】:

    • 这并不能真正回答我的问题。首先,评论必须属于一篇文章,所以让它可以为空是没有意义的。其次,我知道disconnect,但是如果文章被删除了,我就不需要再存储评论了,我问这个问题想办法在断开连接后删除它。最后,您的代码中没有任何内容可以区分已删除的 cmets 和新的 cmets。
    • 对不起误会你了,但是你可以先删除cmets prisma.comment.deleteMany({ where: { articleId: id } }),然后会自动从文章中删除,因为ON DELETE CASCADE(我假设您使用的是mysql或postgress)
    • 好的,请更新您的答案,以便我将其标记为正确。
    • 酷,我已经更新了答案
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多