【问题标题】:The Mongo connector currently does not support Cascading DeletesMongo 连接器当前不支持级联删除
【发布时间】:2019-09-22 19:09:30
【问题描述】:

我正在与 Prisma 合作,我想支持 CASCADE delete,但尽管我已经完成了文档中提到的所有操作,但我仍然无法使用它

这是我在尝试部署 Prisma 时遇到的错误

Errors:

  Restaurant
    ✖ The Mongo connector currently does not support Cascading Deletes, but the field `foods` defines cascade behavior. Please remove the onDelete argument.}

这里是代码

type Restaurant {
      id: ID! @id
      name: String!
      foods: [Food!]! @relation(onDelete: CASCADE, name: "FoodToRestaurant", link: INLINE)
    }

    type Food {
      id: ID! @id
      name: String!
      desc: String
      price: Float!
      category: Category!
      restaurant: Restaurant! @relation(name: "FoodToRestaurant", onDelete: SET_NULL)
    }

我希望当餐厅被删除时,它的所有食物也应该被删除

我已使用 Prisma PostgreSQL 删除了 CASCADE,但现在我想将 MongoDB 用于此应用程序

【问题讨论】:

  • 由于 Prisma MongoDB 连接器当前不支持级联删除(请参阅GitHub issue #3796),因此应该出现错误消息。

标签: mongodb prisma prisma-graphql


【解决方案1】:

由于不可能,您应该手动管理它。

意味着您应该递归删除所有相关实体。

例如,如果它是您的数据库架构:

问题 -> 评论 -> 评分

如果要删除问题,则应删除与该问题相关的所有 cmets,如果要删除评论,则应删除分配给该评论的所有费率。所以你需要一些递归函数来删除这些实体。

function deleteQuestion(questionId) {
  for each comment related to questionID
    deleteComment(commentId)
  delete(questionId)       
}

function deleteComment(commentId) {
  for each rate related to commentId
    deleteRate(rateId)
  delete(commentId)       
}

function deleteRate(rateId) {
  delete(rateId)       
}

【讨论】:

    【解决方案2】:

    目前 mongodb prisma 不支持级联删除。如果您的架构中有它,请将其删除。

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多